将大数据导入 android 上的 sqlite 数据库 - 花费的时间太长。需要替代品
Importing large data into sqlite db on android - takes too long. need alternatives
我的应用程序有一个 sqlite table...但需要尽快 add/remove 大量数据。我愿意接受很多选择。现在,我有大约 35,000 行,我可以在大约 15 秒内更新。我更喜欢更快的东西。基本上只需要一栏作为我的辅助文本。
现在,用户下载了一个 txt 文件,然后该文件被传递给下面的方法。
public boolean installLanguageFile(String resourceId) {
SQLiteDatabase db;
db = new DataBaseHelper(getContext()).getWritableDatabase();
try {
File mFile = new File(getActivity().getFilesDir() + resourceId);
InputStream insertsStream = new FileInputStream(mFile);
BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream));
long lengthOfFile = 34504;
long total = 0;
int rowId = 1;
String sql = "UPDATE Story_Data SET text2 = ('?') WHERE _id = ?";
db.beginTransaction();
SQLiteStatement stmt = db.compileStatement(sql);
while (insertReader.ready()) {
total += rowId;
stmt.bindString(1, insertReader.readLine());
stmt.execute();
stmt.clearBindings();
publishProgress("" + (rowId * 100 / lengthOfFile));
rowId++;
}
db.setTransactionSuccessful();
db.endTransaction();
insertReader.close();
//mCallback.reloadView();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
就地更新所有行需要数据库移动大量数据。
如果可能,先删除所有旧行,然后插入所有新行。
最快的方法是避免文本文件:将新数据作为数据库文件发送,ATTACH将更新文件发送到主数据库,然后像这样在单个语句中复制数据:
INSERT INTO main.Story_Data(ID, text2) SELECT ID, text2 FROM updateDB.Story_Data;
我的应用程序有一个 sqlite table...但需要尽快 add/remove 大量数据。我愿意接受很多选择。现在,我有大约 35,000 行,我可以在大约 15 秒内更新。我更喜欢更快的东西。基本上只需要一栏作为我的辅助文本。
现在,用户下载了一个 txt 文件,然后该文件被传递给下面的方法。
public boolean installLanguageFile(String resourceId) {
SQLiteDatabase db;
db = new DataBaseHelper(getContext()).getWritableDatabase();
try {
File mFile = new File(getActivity().getFilesDir() + resourceId);
InputStream insertsStream = new FileInputStream(mFile);
BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream));
long lengthOfFile = 34504;
long total = 0;
int rowId = 1;
String sql = "UPDATE Story_Data SET text2 = ('?') WHERE _id = ?";
db.beginTransaction();
SQLiteStatement stmt = db.compileStatement(sql);
while (insertReader.ready()) {
total += rowId;
stmt.bindString(1, insertReader.readLine());
stmt.execute();
stmt.clearBindings();
publishProgress("" + (rowId * 100 / lengthOfFile));
rowId++;
}
db.setTransactionSuccessful();
db.endTransaction();
insertReader.close();
//mCallback.reloadView();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
就地更新所有行需要数据库移动大量数据。
如果可能,先删除所有旧行,然后插入所有新行。
最快的方法是避免文本文件:将新数据作为数据库文件发送,ATTACH将更新文件发送到主数据库,然后像这样在单个语句中复制数据:
INSERT INTO main.Story_Data(ID, text2) SELECT ID, text2 FROM updateDB.Story_Data;