如何在Android中的SQLite中使用update
语句更新行数?
请注意,我需要使用某种类型的SQL语句的原始执行,而不是对ContentValues
执行任何操作,因为我需要动态查询。因此,我无法使用SQLiteDatabase.update()
方法。例如,我正在运行类似
UPDATE my_table
SET field_name = field_name + 1
我知道的返回void的方法,例如SQLiteDatabase.execSQL()
。 SQLiteDatabase.rawQuery()
返回Cursor
,但游标的行数为零,其计数始终为-1。
答案 0 :(得分:16)
您可以根据需要进行插入,然后执行选择并使用changes()
函数返回受影响的行数。
答案 1 :(得分:11)
要展开Mat's answer,以下是获取更新行数的示例代码:
Cursor cursor = null;
try
{
cursor = db.rawQuery("SELECT changes() AS affected_row_count", null);
if(cursor != null && cursor.getCount() > 0 && cursor.moveToFirst())
{
final long affectedRowCount = cursor.getLong(cursor.getColumnIndex("affected_row_count"));
Log.d("LOG", "affectedRowCount = " + affectedRowCount);
}
else
{
// Some error occurred?
}
}
catch(SQLException e)
{
// Handle exception here.
}
finally
{
if(cursor != null)
{
cursor.close();
}
}
答案 2 :(得分:4)
扩展Mat和Pang的答案......
我们可以跳过光标并使用 simpleQueryForLong()
吗?
e.g。
public long getChangesCount() {
SQLiteDatabase db = getReadableDatabase();
SQLiteStatement statement = db.compileStatement("SELECT changes()");
return statement.simpleQueryForLong();
}
答案 3 :(得分:1)
您可以使用SQLiteStatement.executeUpdateDelete方法:
SQLiteDatabase db = getReadableDatabase();
SQLiteStatement statement = db.compileStatement("[your sql here]");
int affectedRows = statement.executeUpdateDelete();
SQLiteDatabase.update(...)方法内部使用的相同方法。