Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中加速SQLite数据库插入?_Java_Android_Performance_Sqlite - Fatal编程技术网

Java 如何在Android中加速SQLite数据库插入?

Java 如何在Android中加速SQLite数据库插入?,java,android,performance,sqlite,Java,Android,Performance,Sqlite,在字典查询应用程序中生成大量结果时,我似乎在某个点上每次插入500-1000毫秒。有什么我不懂的插入技巧吗 下面是一个插入的示例 long id = this.getDbAdapter().insertData( "combo", result.getWord(), String.valueOf(result.getNumLetters()), String.valueOf(result.getPointsScrabble()), String.v

在字典查询应用程序中生成大量结果时,我似乎在某个点上每次插入500-1000毫秒。有什么我不懂的插入技巧吗

下面是一个插入的示例

long id = this.getDbAdapter().insertData(
    "combo",
     result.getWord(),
     String.valueOf(result.getNumLetters()),
     String.valueOf(result.getPointsScrabble()),
     String.valueOf(result.getPointsWordsWithFriends())
);
if (id < 0) {
    Log.i(TAG, "Database combo insertion of " + result.getWord() + " unsuccessful :(");
} else {
    Log.i(TAG, "Database combo insertion of " + result.getWord() + " successful :)");

}
众所周知,在多个插入之间重用a可以提高插入速度

SQLiteDatabase db = helper.getWritableDatabase();
db.beginTransaction();
try {
    final SQLiteStatement insertStatement = db.compileStatement("INSERT INTO x (a,b) VALUES (?, ?);");
    for (Item item : itemsToInsert) {
        insertStatement.clearBindings();
        insertStatement.bindLong(1, item.getA());
        insertStatement.bindString(2, item.getB());
        insertStatement.executeInsert();
    }
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

与为每行执行一个新的insert语句相比,如果您插入了许多insert语句,性能提升通常是2-3倍。

您可以实现的最简单和最有效的性能提升之一是管理数据库事务

这可以通过以下方式实现:

db.beginTransaction();
try {
  InsertData();
  db.setTransactionSuccessful();
} catch {
  //Error in between database transaction 
} finally {
  db.endTransaction();
}

此外,通过修改到数据库的标准连接字符串可以提高速度。是各种速度改进的绝佳资源,

只有代码可以帮助回答此问题。请将代码张贴在您正在进行这些插入的地方,这些插入花费了很长时间。请查看右侧的
相关列。这里有一堆相关的问题。为什么要为查询执行插入?这个问题很不清楚,到目前为止答案还不成熟。。。他们可能会说“快一点的手机”,这让事情有点快了。。。谢谢:)
db.beginTransaction();
try {
  InsertData();
  db.setTransactionSuccessful();
} catch {
  //Error in between database transaction 
} finally {
  db.endTransaction();
}