有很多使用的答案和教程InsertHelper做快速批量插入在SQLiteDatabase。
但InsertHelper被弃用API 17。
现在什么是批量最快的方法插入大型数据集在Android的SQLite的?
到目前为止,我最担心的是SQLiteStatement不是很舒服的工作,在那里InsertHelper有约束力的列和结合的价值观,这是一种微不足道的。
有很多使用的答案和教程InsertHelper做快速批量插入在SQLiteDatabase。
但InsertHelper被弃用API 17。
现在什么是批量最快的方法插入大型数据集在Android的SQLite的?
到目前为止,我最担心的是SQLiteStatement不是很舒服的工作,在那里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应用特别是供应商 ,这是谷歌开发人员如何做到这一点,所以你可以肯定, 这是正确的方式。
我面临着同样的问题,但没有找到SQLiteStatement怎么可能轻易更换DatabaseUtils.InsertHelper,你需要建立手工SQL查询。
最后我用SQLiteDatabase.insertOrThrow它可以很容易地替换现有的代码。 我只需要有时候一个空列添加砍来处理,我插入空ContentValues情况。
是的声明不编译稍后重用,但建设用手INSERT查询并结合所有的参数是太痛了。 我很想知道有多少对大批量插入数据集这一冲击性能(InsertHelper只是不建议使用)的情况下,您修改代码。
我只是做了默认的类只保留相关InsertHelper代码的备份,检查出这个要点 。
我敢肯定,这是过时的清理SDK utils的类。 剩下什么我的同班同学只使用非过时的东西。