是否可以将存储在res/raw资源目录中的csv文件用于填充sqlite3数据库中的表?
我的想法是,如果有一种方法可以将整个文件批量导入到表中,那么比迭代文件中的每一行并执行单独的插入语句更简洁,更快......
我发现有一个sqlite import命令允许这样:如何导入将.sql或.csv文件加载到SQLite中?
...但我在Android应用程序中应用这些语句时遇到了问题.我的第一个想法是尝试类似下面的东西......但没有运气:
db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT)");
db.execSQL(".mode csv");
db.execSQL(".import res/raw/MyFile.csv " + TABLE_NAME);
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我应该尝试不同的方法来填充我的数据库吗?
更新:我将Josef的回复标记为答案(使用交易批量插入),因为它工作正常并根据我的标题直接回答我的问题(感谢Josef).但是,我仍在寻找一种方法,使用import语句在csv文件中将Android应用程序批量插入到sqlite3表中.如果你知道怎么做,请回复.
谢谢你的回答!
有很多答案和教程使用InsertHelper在SQLiteDatabase中快速批量插入.
但是从API 17开始,不推荐使用InsertHelper.
什么是在Android SQLite中批量插入大量数据的最快方法?
到目前为止,我最关心的是SQLiteStatement使用起来不太舒服,其中InsertHelper具有绑定列和绑定值,这有点微不足道.
sqlite android bulkinsert android-contentprovider android-sqlite
在我的应用程序中,我必须在SQLite数据库android中插入或更新Bulk of record,记录大小可能为3000或更大,
String query="SELECT * FROM tableName where "+id+" = "+bean.id()+" and "+other_id+" = "+bean.otherID();
Cursor mCount= db.rawQuery(query , null);
mCount.moveToFirst();
row=mCount.getCount();
mCount.close();
/**
* Insert here
*/
if(row==0){
ContentValues values = new ContentValues();
values.put(key, "value");
values.put(key, "value");
db.insert("tableName", null, values);
}
/**
* Updated here
*/
else{
ContentValues values = new ContentValues();
values.put(key, "value");
values.put(key, "value");
db.update("tableName", values, "id"+" = ? and "+"other_id"+" = ? ", new String[] {bena.id(),bean.otherid});
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,但需要花费很多时间,如何减少这段时间,或批量插入或更新记录.