2017-02-21 48 views
0

我有一个JSONObject:插入JSON来SQLite表的Android

{"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"}]} 

我怎么能插入到源码的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

不,我没有错误,但很长时间的过程.. –

回答

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(); 
} 
} 
0

您可以使用ContentValues用的BeginTransaction到SQLite的那是相当的方便以及更快然后准备语句

为此,您必须先创建ContentValues数组或将内容值对象创建到您的循环中。并通过插入方法。这个解决方案解决您的两个问题于一身。

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(); 
    } 

只能通过内容值的目标像环,插入并在上面的代码中的事务被用于这样就加快数据的基础上存储。