2012-10-29 79 views
0

在更新表中的列時出現問題。我想這兩種解決方案:更新不起作用sqlite android

 this.openDataBase(); 
     String SQLStatement = "update " + TABLE_POSES; 
     SQLStatement += " set " + COLUMN_SKIP + "=" + SKIP + " Where "; 
     SQLStatement += COLUMN_ID + "=" + String.valueOf(skipPoseId); 
     myDataBase.rawQuery(SQLStatement, null); 
     this.close(); 

這:

 this.openDataBase(); 
     ContentValues args = new ContentValues(); 
     args.put(COLUMN_SKIP,SKIP); 
     myDataBase.update(TABLE_POSES, args, COLUMN_ID + "=" + String.valueOf(skipPoseId),null); 
     this.close(); 

無論這些代碼段的工作,我沒有得到任何拋出的異常。我究竟做錯了什麼?

+0

您是否收到錯誤?你可以發佈你的LogCat嗎? – jnthnjns

+0

我沒有得到任何異常。 –

+0

我也試過使用beginTransaction();和setTransactionSuccessful()語句,並沒有改變。 –

回答

0

您應該使用update()的第二種方法,您應該檢查返回值。如果該值爲零,那麼數據庫的狀態不是您所期望的,也不會更新行。如果該行不爲零,則更新成功。

如果訪問數據庫時出現任何問題,在update()調用之前會拋出異常。

我會趁update() args參數的,像這樣:

myDataBase.update(TABLE_POSES, args, COLUMN_ID + " = ?", new String[]{ Long.toString(skipPoseId) }); 
+0

我得到1的返回值,但該行沒有被更新。 –

+0

你如何檢查行是否正在更新?除非Android代碼中有一個錯誤,否則1代表一行被更新。 – Samuel

+0

我可以根據應用程序的列未被更新的行爲來判斷。 –

0

使用update這個樣子,

 String query="UPDATE tablename SET columnname="+var+ "where columnid="+var2; 
     sqlitedb.execSQL(query); 

只要寫在查詢字符串的更新查詢和執行。

+0

使用預準備語句更安全 – Samuel

0

,如果你在代碼中使用db.begintransaction()必須db.endtransaction()之前調用db.setTransactionSuccessful()如:

try { 
     SQLHelper dbHelper = new SQLHelper(this); 
     SQLiteDatabase db = dbHelper.getWritableDatabase(); 

     db.beginTransaction(); 
     ................... 

     db.setTransactionSuccessful(); 

     db.endTransaction(); 

     db.close(); 

} 
catch (Exception ex){ 

}