我从网络下载了800 insert
个语句,格式如下:
insert into mytable(col1,..,coln) values(val1,..valn);insert into mytable col...
我听说过交易,ContentValue
和使用union
,但我无法弄清楚哪一种更适合这种情况。
截断mytable
后,在sqlite数据库中插入它们的最佳方法是什么?
答案 0 :(得分:18)
如果要运行多个查询,为了提高数据完整性和性能,您应该使用事务。这是一个代码,可以让您了解如何执行此操作:
SQLiteDatabase db = sqlHelper.getWritableDatabase(); // get a writable database here
db.beginTransaction();
try {
for (int insertQuery : listOfQueries) { // loop through your records
db.insert(...);
}
db.setTransactionSuccessful();
}
finally {
db.endTransaction();
}
db.close();
答案 1 :(得分:0)
我使用下面的代码,只运行一次查询。
public void addListRecord(List<Province> list) {
SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
try {
String sql = " INSERT INTO " + TABLE_PROVINCE + " ("
+ COL_PROVINCE_ID + ","
+ COL_PROVINCE_NAME + ","
+ COL_PROVINCE_STATUS + ") VALUES ";
String value = "";
for (Province item : list) {
value += "('" + item.getId() + "',"
+ "'" + item.getName() + "',"
+ "'" + item.getStatus() + "')";
value += ",";
}
value = Utils.removeLastChar(value);
value += ";";
String mQuery = sql + value;
Logger.debug("mQuery: " + mQuery);
SQLiteStatement statement = db.compileStatement(mQuery);
statement.execute();
} catch (SQLException e) {
Logger.debug("SQLException Error: " + e);
} finally {
DatabaseManager.getInstance().closeDatabase();
}
}
public static String removeLastChar(String s) {
if (s == null || s.length() == 0) {
return s;
}
return s.substring(0, s.length() - 1);
}