Android SQLiteDatabase使用带有IN或OR的where子句更新多行(Android SQLiteDatabase update multiple rows using where

编程入门 行业动态 更新时间:2024-10-24 02:01:48
Android SQLiteDatabase使用带有IN或OR的where子句更新多行(Android SQLiteDatabase update multiple rows using where clause with IN or OR)

我有以下代码用于更新数据库中的单行:

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; }

这工作正常,但现在我想重构该方法,以便它接受一个I​​ncomingMessage列表而不是一个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"});

更多推荐

本文发布于:2023-08-07 13:18:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1464224.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子句   SQLiteDatabase   Android   update   clause

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!