2016-12-18 55 views
1

我正在開發一個在android中使用sqlite數據庫的應用程序。 這是我的表DDL代碼。如何在Android中使用sqlite獲取更新的行數?

db.execSQL("CREATE TABLE 'ad_img' (" + 
"'ad_img_uid' INTEGER PRIMARY KEY AUTOINCREASE NOT NULL," + 
"'ad_uid' INTEGER," + 
"'ad_img_url' TEXT(255) NOT NULL," + 
"'ad_img_local' TEXT(255) NOT NULL" + 
")"); 

這是我更新的sql代碼。

public int updateLocalPathTOAdImg(int ad_uid, String ad_img_url, String ad_img_local) { 
     int result = 0; 

     try { 
      String sql = "UPDATE 'ad_img' SET " + 
        "'ad_img_local' = '" + ad_img_local + "' " + 
        "WHERE 'ad_uid' = " + ad_uid + " AND 'ad_img_url' = '" + ad_img_url + "'"; 
      m_db.execSQL(sql); 

      return result; ///////updated row count?? 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     return result; 
    } 

當然,我可以使用update()和changes()函數。 但我想使用execSQL()函數。

我可以通過使用execSQL()函數獲取更新的行數嗎?

回答

1

SQLite C API的ID,程序已經執行了一個UPDATE語句之後,改變的行數可以通過調用sqlite3_changes()確定。

在Android框架中,調用sqlite3_changes()的唯一地方是update()方法。

如果您需要做的是update()過於複雜的更新,你必須執行第二查詢調用內置changes() function

db.execSQL("UPDATE ..."); 
long changes = DatebaseUtils.longForQuery(db, "SELECT changes()", null); 

或者,您可以啓用棄用PRAGMA count_changes(希望可用)從UPDATE語句本身返回的數量就好像它是一個查詢:

class MyOpenHelper { 
    ... 
    void onConfigure(SQLiteDatabase db) { 
     db.execSQL("PRAGMA count_changes = ON"); 
    } 
} 

... 

changes = DatebaseUtils.longForQuery(db, "UPDATE ...", null); 
+0

我可以找不到DatabaseUtils類。它在哪裏?圖書館還是工具? –

+0

android.database。[DatabaseUtils](https://developer.android.com/reference/android/database/DatabaseUtils.html) –

-1
public int getSingleRow(String food_name){ 
      SQLiteDatabase myDb = getReadableDatabase(); 
      Cursor cursor = null; 
      int value=0; 
      try{ 
       cursor = myDb.rawQuery("SELECT quantity FROM table_food_palate WHERE name=?",new String[]{food_name}); 
       if (cursor.getCount() >0){ 
        cursor.moveToFirst(); 
        value = Integer.parseInt(cursor.getString(cursor.getColumnIndex("id"))); 
//id stands for the column name called id      
Log.e("TAG","Value has been saved"); 
       } 
       return value; 
      } finally { 
       cursor.close(); 
       myDb.close(); 
      } 
     } 

這應該給你行你剛剛更新

相關問題