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中找不到很好的解决方案,但它很简单:

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

我建议你看看谷歌IO应用程序,特别是提供商 ,这是谷歌开发人员这样做,所以你可以确定是正确的方法。

我遇到了同样的问题,无法findSQLiteStatement如何轻松替换DatabaseUtils.InsertHelper,因为您需要手动构建SQL查询。

我最终使用了SQLiteDatabase.insertOrThrow ,它可以轻松替换现有代码。 我只需要添加一个空列hack来处理我插入空ContentValues的情况。

是的,该语句不会被编译为稍后重用,但是手动构建INSERT查询并绑定所有参数太麻烦了。 如果您修改代码,我很想知道大批量插入数据集的影响性能(仅限于不推荐使用InsertHelper)。

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

我很确定不推荐使用它来清理SDK utils类。 我的class级剩下的只是使用非弃用的东西。