由以下原因引起:android.database.sqlite.SQLite异常:接近"2016":语法错误(代码 1):,编译时:Android 中 SQLite 表中的更新日期



我想将json字符串转换为日期并保存到SQLite表中。但是得到`的异常,原因是:android.database.sqlite.SQLiteException:接近"2016":语法错误(代码1):,编译时:更新。我的应用程序在一段时间后崩溃

这是我的代码

for (int j = 0; j < jarr_ActivityObjectList.length(); j++)
            {
                JSONObject jobjVessels = jarr_ActivityObjectList.getJSONObject(j);
                strActivitObj_ActiveStatus =  jobjVessels.getString("ActiveStatus");
                strImageCreatedDate = jobjVessels.getString("CreateDate");
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a", Locale.getDefault());
                Date date = new Date(strImageCreatedDate);
                String newImageCreatedDate = dateFormat.format(date);
                str_imgList_activityId = jobjVessels.getString("activityId");
                str_imgList_activityObjId = jobjVessels.getString("activityObjId");
                int activityObjId = 0;
                try
                {
                    activityObjId = Integer.parseInt(str_imgList_activityObjId);
                } catch(NumberFormatException nfe) {
                    System.out.println("Could not parse " + nfe);
                }
                str_imgList_objectId = jobjVessels.getString("objectId");
                str_imgList_userId = jobjVessels.getString("userId");
                String strImageDownLoadStatus = "0";
                String strUpLoadStatus = "1";
                str_imgList_imageaudioPath = jobjVessels.getString("imageaudioPath");
                if (strActivitObj_ActiveStatus.equals("1"))
                {
                    if (dbhelper.isActivityObject_ImageAudioPath(str_imgList_imageaudioPath))
                    {
                        //dbhelper.update_ActivityObjectList(strActivitObj_ActiveStatus, newImage_DateString , str_imgList_activityId, activityObjId, str_imgList_imageaudioPath, str_imgList_objectId, str_imgList_userId, strImageDownLoadStatus , strUpLoadStatus);
                       db = dbhelper.getWritableDatabase();
                       db.execSQL("update ActivityObjectList set ActiveStatus = '" + strActivitObj_ActiveStatus + " , CreatedDate='" + newImageCreatedDate + "' , activityId='" + str_imgList_activityId + "' , activityObjId= '" + activityObjId + "', objectId= '" + str_imgList_objectId + "', userId= '" + str_imgList_userId + "', DownLoad_Status='" + strImageDownLoadStatus + "', UpLoadStatus='" + strUpLoadStatus + "' where imageaudioPath = '" + str_imgList_imageaudioPath + "'");
                    }
                    else
                    {
                        dbhelper.insert_ActivityObjectList(strActivitObj_ActiveStatus, newImageCreatedDate , str_imgList_activityId, activityObjId, str_imgList_imageaudioPath, str_imgList_objectId, str_imgList_userId, strImageDownLoadStatus , strUpLoadStatus);
                    }
                }
                if (strActivitObj_ActiveStatus.equals("0"))
                {
                    if (dbhelper.isActivityObject_ImageAudioPath(str_imgList_imageaudioPath))
                    {
                        db = dbhelper.getWritableDatabase();
                        db.execSQL("DELETE FROM ActivityObjectList where imageaudioPath = '" + str_imgList_imageaudioPath + "'");
                        Log.e(""," Deleted SuccesFully !!! imageaudioPath " + str_imgList_imageaudioPath);
                    }
                }
            }

这是我的dbhelper代码

 String strTable_ActivityObjectList = "CREATE TABLE IF NOT EXISTS " + Table_ActivityObjectList + " ("
                + COL_activityobjlistID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + COL_activeStatus + " TEXT, "
                + COL_CreatedDate + " TEXT, "
                + COL_activityId + " TEXT, "
                + COL_activityObjId + " INTEGER, "
                + COL_imageaudioPath + " TEXT, "
                + COL_objectId + " TEXT, "
                + COL_userId + " TEXT, "
                + COL_ActivityObject_DownLoadStatus  + " TEXT, "
                + COL_ActivityObject_UpLoadStatus + " TEXT" + ");";
 public boolean update_ActivityObjectList(String strActiveStatus,
                                             String CreatedDate ,
                                             String activityId,
                                             int stractivityObjId,
                                             String strimageaudioPath,
                                             String strobjectId,
                                             String struserId,
                                             String strDownLoadStatus ,
                                             String strUpLoadStatus)
    {
        SQLiteDatabase db = getReadableDatabase();
        ContentValues values = new ContentValues();
        values.put(COL_activeStatus, strActiveStatus);
        values.put(COL_CreatedDate , CreatedDate);
        values.put(COL_activityId, activityId);
        values.put(COL_activityObjId, stractivityObjId);
        values.put(COL_imageaudioPath, strimageaudioPath);
        values.put(COL_objectId, strobjectId);
        values.put(COL_userId, struserId);
        values.put(COL_ActivityObject_DownLoadStatus, strDownLoadStatus);
        values.put(COL_ActivityObject_UpLoadStatus ,strUpLoadStatus );
        int i = db.update(Table_ActivityObjectList, values, COL_imageaudioPath + "=" + strimageaudioPath, null);
        return i > 0;
    }

即使调用update_ActivityObjectList这个上面的更新方法来更新崩溃后的数据。有人能帮我解决这个问题吗?

在添加"空格"

" 2016 " 

在你的方法中?

您应该使用SQLiteDatabase db = getWritableDatabase();而不是SQLiteDatabase db = getReadableDatabase();在数据库中插入值

最新更新