【发布时间】:2012-05-16 11:25:07
【问题描述】:
目前,我必须一次向我的 android 中插入超过 100 亿条数据。但是,内存不足的问题会使程序崩溃。 sqlite 插入测试非常简单。只需使用 for 循环生成 sql insert 命令并由“begin”和“commit”进行 wrqpped。
private ArrayList<String> sqlInsertCmd = new ArrayList<String>();
int QUERIES_TIMES = 10000000;
private void CreateInsertQueries()
{
Random localRandom = new Random();
int i = 0;
while (i < QUERIES_TIMES)
{
int j = localRandom.nextInt(100000);
sqlInsertCmd.add("insert into " + TABLE + " (a,b,c) values (" + i + "," +
j + ",'" + String.valueOf(j) + "')");
++i;
}
}
Then..
mDB.beginTransaction();
for (int i=0; i<this.QUERIES_TIMES; i++)
{
mDB.execSQL(sqlInsertCmd.get(i));
}
mDB.setTransactionSuccessful();
mDB.endTransaction();
有什么办法可以避免内存不足?
谢谢大家,但上面的代码只是一个简单的例子。在我的程序中,它更复杂。我必须在容器中存储一些东西(例如 hashMap)并动态构建 sql 语句。我可以创建 10 个服务,每个服务处理 1/10 个工作吗?
【问题讨论】:
-
请访问我的answer,这可能会给你一些想法
-
你的 Logcat 说什么?在这里显示。
-
最好的选择可能是去路西法答案。
-
如果数据太大,则将数据作为文本文件存储在外部存储器中,并将该文本文件的路径存储在数据库中。它会比在数据库中存储大量数据慢一点,但更好