我有一个JSONObject:
{"Table1":[{"row1":"1","B":"2"},{"row2":"1","B1":"2"}],"Table2":[{"C":"1","D":"1145"},{"C":"1","D":"1145"}],"Table3":[{"E":"62","F":"1"},{"C":"1","D":"1145"}]}
如何插入sqlite foreach表?
现在使用此代码:
for (Iterator<String> iterator = mJson.keys(); iterator.hasNext(); ) {
String tableName = iterator.next();
if (mJson.optJSONArray(tableName) != null) {
resetTable(tableName);
JSONArray tableArray = mJson.optJSONArray(tableName);
for (int i = 0; i < tableArray.length(); i++) {
JSONObject tableData = tableArray.getJSONObject(i);
ContentValues Values = new ContentValues();
for (Iterator<String> iter = tableData.keys(); iter.hasNext(); ) {
String key = iter.next();
Values.put(key, tableData.get(key).toString());
}
db.insert(tableName, null, Values);
}
}
}
但我想要最快捷,更好的方式
答案 0 :(得分:0)
您可以将ContentValues与beginTransaction一起使用到SQLite中,这非常简单,而且比预备语句更快
为此,您必须先创建ContentValues数组,或者在循环中创建Content value对象。并传入插入方法。这个解决方案解决了你们两个问题。
mDatabase.beginTransaction();
try {
for (ContentValues cv : values) {
long rowID = mDatabase.insert(table, " ", cv);
if (rowID <= 0) {
throw new SQLException("Failed to insert row into ");
}
}
mDatabase.setTransactionSuccessful();
count = values.length;
} finally {
mDatabase.endTransaction();
}
您只能传递内容值对象,例如for循环和插入,并且在上面的代码中使用Transaction,这样可以加快数据库存储。
答案 1 :(得分:0)
使用批量插入:
for (Iterator<String> iterator = mJson.keys(); iterator.hasNext(); ) {
String tableName = iterator.next();
if (mJson.optJSONArray(tableName) != null) {
resetTable(tableName);
String sql = "INSERT INTO " + tableName + " VALUES (?);";
SQLiteStatement statement = db.compileStatement(sql);
db.beginTransaction();
JSONArray tableArray = mJson.optJSONArray(tableName);
for (int i = 0; i < tableArray.length(); i++) {
JSONObject tableData = tableArray.getJSONObject(i);
for (Iterator<String> iter = tableData.keys(); iter.hasNext(); ) {
String key = iter.next();
statement.clearBindings();
statement.bindString(1,tableData.get(key).toString());
statement.execute();
}
}
db.setTransactionSuccessful();
db.endTransaction();
}
}