2016-12-18 27 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(); 
      } 
     } 

这应该给你行你刚刚更新

相关问题