gpt4 book ai didi

Android:批量插入,当 InsertHelper 被弃用时

转载 作者:IT王子 更新时间:2023-10-28 23:36:37 26 4
gpt4 key购买 nike

有很多答案和教程使用 InsertHelper在 SQLiteDatabase 中进行快速批量插入。
但是InsertHelper自 API 17 起已弃用。

现在在 Android SQLite 中批量插入大量数据的最快方法是什么?

到目前为止,我最担心的是 SQLiteStatement使用起来不太舒服,其中 InsertHelper 具有绑定(bind)列和绑定(bind)值,这有点微不足道。

最佳答案

SQLiteStatement 也有绑定(bind)方法,它扩展了 SQLiteProgram .

只需在事务中运行它:

    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
final SQLiteStatement statement = db.compileStatement(INSERT_QUERY);
db.beginTransaction();
try {
for(MyBean bean : list){
statement.clearBindings();
statement.bindString(1, bean.getName());
// rest of bindings
statement.execute(); //or executeInsert() if id is needed
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}

编辑

我在 SQLiteQueryBuilder 中找不到好的解决方案但它很简单:

final static String INSERT_QUERY = createInsert(DbSchema.TABLE_NAME, new String[]{DbSchema.NAME, DbSchema.TITLE, DbSchema.PHONE});

static public String createInsert(final String tableName, final String[] columnNames) {
if (tableName == null || columnNames == null || columnNames.length == 0) {
throw new IllegalArgumentException();
}
final StringBuilder s = new StringBuilder();
s.append("INSERT INTO ").append(tableName).append(" (");
for (String column : columnNames) {
s.append(column).append(" ,");
}
int length = s.length();
s.delete(length - 2, length);
s.append(") VALUES( ");
for (int i = 0; i < columnNames.length; i++) {
s.append(" ? ,");
}
length = s.length();
s.delete(length - 2, length);
s.append(")");
return s.toString();
}

关于Android:批量插入,当 InsertHelper 被弃用时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14344172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com