【发布时间】:2016-02-29 16:28:57
【问题描述】:
我的应用程序有一个 sqlite 表...但需要尽快添加/删除大量数据。我对很多选择持开放态度。现在,我有大约 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;
}
}
【问题讨论】:
-
是否也有本地更改,还是所有数据都来自服务器?如果全部来自服务器,最快的方法就是下载一个新的db文件。
-
如果您因为其他带有用户输入的表而无法执行此操作,但此表来自服务器 - 删除此表并使用所有插入重新创建它可能比更新每一行更快。但这需要您进行基准测试和仔细检查。
-
你有没有试过不公布每次迭代的进度会快多少?对于初学者,请尝试将其完全删除
-
@GabeSechan 更改来自服务器。我创建/下载数据库没有问题..但我的问题是附加它。由于主要代码查询“story_data” - 现在..我可以让方法查询搜索story_data和story_data2并使用偏好在两者之间切换。如果这有意义的话。
-
@DavidMedenjak 我现在就试一试。
标签: android sqlite android-sqlite