Android:批量插入,当InsertHelper弃用

有很多答案和教程使用InsertHelper在SQLiteDatabase中进行快速批量插入。
但是,从API 17开始,不推荐使用InsertHelper 。

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

到目前为止,我最大的担心是SQLiteStatement不太适合使用,其中InsertHelper具有绑定列和绑定值,这是很平常的。

Solutions Collecting From Web of "Android:批量插入,当InsertHelper弃用"

SQLiteStatement也有绑定方法,它扩展了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中find很好的解决scheme,但它很简单:

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

我build议你看看谷歌IO应用程序,特别是提供商 ,这是谷歌开发人员如何做到这一点,所以你可以肯定, 是正确的方式。

我正面临同样的问题,无法find如何SQLiteStatement可以轻松地replaceDatabaseUtils.InsertHelper,因为您需要手动构buildSQL查询。

我结束了使用SQLiteDatabase.insertOrThrow ,可以轻松地replace现有的代码。 我只需要添加一个空列黑客来处理插入空的ContentValues的情况。

是的,这个语句没有被编译成以后被重用,而是手动build立一个INSERT查询并绑定所有的参数太痛苦了。 如果您修改了代码,我将很感兴趣知道对于大容量插入数据集(InsertHelper是否仅被弃用)影响性能。

我只保留了与InsertHelper相关的代码的默认类的备份,看看这个要点 。

我很确定这已经被弃用来清理SDK utils类。 我的课堂上剩下的只是使用非弃用的东西。