我有以下代码用于更新数据库中的单行:
public int updateSentFieldForIncomingMessage(IncomingMessage incomingMessage) { SQLiteDatabase db; int numberOfRowsAffected; try { db = super.getWritableDatabase(); } catch (SQLiteException e) { File dbFile = context.getDatabasePath(DATABASE_NAME); db = SQLiteDatabase.openDatabase(dbFile.getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); } try { ContentValues values = new ContentValues(); values.put(KEY_MESSAGE_SENT, true); numberOfRowsAffected = db.update(TABLE_INCOMING_MESSAGES, values, KEY_ID + " = ?", new String[]{String.valueOf(incomingMessage.getId())}); } finally { db.close(); } return numberOfRowsAffected; }这工作正常,但现在我想重构该方法,以便它接受一个IncomingMessage列表而不是一个IncomingMessage参数。 但是当我接到这个声明时:
db.update(TABLE_INCOMING_MESSAGES, values, KEY_ID + " = ?", new String[]{String.valueOf(incomingMessage.getId())});我不知道如何修改它,以便我可以在WHERE子句中指定多行(通过KEY_ID)。 我想做的是说KEY_ID IN ( <multiple row IDs here> ) 。 那可能吗?
I have the following code which I was using to update a single row in my database:
public int updateSentFieldForIncomingMessage(IncomingMessage incomingMessage) { SQLiteDatabase db; int numberOfRowsAffected; try { db = super.getWritableDatabase(); } catch (SQLiteException e) { File dbFile = context.getDatabasePath(DATABASE_NAME); db = SQLiteDatabase.openDatabase(dbFile.getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); } try { ContentValues values = new ContentValues(); values.put(KEY_MESSAGE_SENT, true); numberOfRowsAffected = db.update(TABLE_INCOMING_MESSAGES, values, KEY_ID + " = ?", new String[]{String.valueOf(incomingMessage.getId())}); } finally { db.close(); } return numberOfRowsAffected; }This works fine but now I'd like to refactor the method so that instead of a single IncomingMessage parameter, it accepts a list of IncomingMessage. But when I get to this statement:
db.update(TABLE_INCOMING_MESSAGES, values, KEY_ID + " = ?", new String[]{String.valueOf(incomingMessage.getId())});I'm not sure how to modify it so that I can specify multiple rows (via KEY_ID) in my WHERE clause. What I'd like to do is say something like KEY_ID IN ( <multiple row IDs here> ). Is that possible?
最满意答案
那可能吗?
它是,但你需要一些? 等于String[]的长度。 您可以使用“字符串”构建器来创建此类whereClause 。
例如
db.update(TABLE_INCOMING_MESSAGES, values, KEY_ID + " IN ( ?, ?, ?, ?)", new String[]{String.valueOf(incomingMessage.getId()), "id1", "id2", "id3"});Is that possible?
it is, but you will need a number of ? equals to the length of String[]. You can use a String builder to create such whereClause.
E.g.
db.update(TABLE_INCOMING_MESSAGES, values, KEY_ID + " IN ( ?, ?, ?, ?)", new String[]{String.valueOf(incomingMessage.getId()), "id1", "id2", "id3"});更多推荐
发布评论