我使用以下方法读取/写入db:
数据库位于/data/data/{packagename}/databases/Database.db 由于数据库大于3Mb,我们找到了一个特定的解决方案,将其复制到那里,并用适当的数据填充。
以下是实现获取打开的数据库的任务的类。这个班是一个单身人士。
public class DatabaseHelper extends SQLiteOpenHelper
打开数据库我们使用以下方法:
SQLiteDatabase db = DatabaseHelper.getInsance().getReadableDatabase();
然后使用rawquery查询db:
Cursor cursor = db.rawQuery(query, null);
那么最符合我们目的的是,我们将数据库数据提取到不同结果集实例的内存中:
while (cursor.moveToNext()) {
ResultSet rs = new ResultSet();
rs.setThis(cursor.getInt(0));
rs.setThat(cursor.getString(1));
// and so on.. this is just an example
ResultList.add(rs);
}
最后:
cursor.close();
db.close();
如果有必要,请提及交易,但使用交易不会导致加速。
对于每个查询,上面的模式都是(完全)遵循的。但不幸的是,这个解决方案似乎很慢。因此,进行了一些方法分析,并且清楚地表明,sqlite setlocale总是在getReadableDatabase()
运行(创建!不要忘记),并且该方法占用大部分时间。平均只有40%..
请指教如何解决这个问题!或者请提供其他模式以满足我们的需求!
提前致谢
答案 0 :(得分:0)
Szia!
最有趣的是,native_setLocale(导致DB缓慢打开)显然甚至无法工作:http://code.google.com/p/android/issues/detail?id=2625
答案 1 :(得分:0)
6)最后:
cursor.close();
db.close();
在查询之间不能保持数据库打开?
答案 2 :(得分:0)
与此处提出的问题(SQLCipher for Android getReadableDatabase() Overherad)一样,您看到的性能问题可能是由于SQLCipher密钥派生所致。由于密钥派生,打开数据库的性能有意降低。您应该缓存数据库连接,以便可以多次使用它,而无需重复打开和键入数据库。如果可以,在启动期间打开数据库一次是首选的操作过程。对同一数据库句柄的后续访问不会触发密钥派生,因此性能会更快。