使用 SQLiteStatement 的插入代码通常是这样的,

String sql = "INSERT INTO table_name (column_1, column_2, column_3) VALUES (?, ?, ?)";
SQLiteStatement statement = db.compileStatement(sql);

int intValue = 57;
String stringValue1 = "hello";
String stringValue2 = "world";
// corresponding to each question mark in the query
statement.bindLong(1, intValue);
statement.bindString(2, stringValue1);
statement.bindString(3, stringValue2);

long rowId = statement.executeInsert();

现在这工作得很好,但我在这里发现的问题是我必须非常小心地将正确的数据绑定(bind)到相应的索引。一个简单的索引交换会给我一个错误。

另外假设将来我的 column_2 从表中删除,然后我将不得不更改 column_2 索引之后的所有索引,否则该语句将不起作用。如果我只有 3 列,这似乎微不足道。想象一下,如果一个表有 10-12(甚至更多)列并且第 2 列被删除。我将不得不更新所有后续列的索引。这整个过程似乎效率低下且容易出错。

有没有一种优雅的方法来处理所有这些

编辑 :我为什么要使用 SQLiteStatement ?检查这个:Improve INSERT-per-second performance of SQLite?

最佳答案

插入可以用 ContentValues 完成:

ContentValues cv = new ContentValues();
cv.put("column_1", 57);
cv.put("column_2", "hello");
cv.put("column_3", "world");
long rowId = db.insertOrThrow("table_name", null, cv);

但在一般情况下,最正确的方法是使用 named parameters 。但是,Android 数据库 API 不支持这些。

如果您真的想使用 SQLiteStatement ,请编写您自己的辅助函数,从列列表构造它并负责将其与实际数据进行匹配。您还可以编写自己的 bindXxx() 包装器,将先前保存的列名称映射到参数索引。

关于android - 如何将值绑定(bind)到 SQLiteStatement 以进行插入查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41921473/

10-12 04:12