2017-02-21 5 views
0

私はJSONObjectを持っている:挿入JSONアンドロイド

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

いいえ、私はエラーはありませんが、長い時間のプロセス.. –

答えて

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
あなたは非常に簡単であるだけでなく、より速く、その後のSQLiteへのbeginTransactionでContentValuesを使用することができます

プリペアドステートメント

最速かつより良い方法をしたいですこのためには、事前にContentValues Arrayを作成するか、ループにContent値オブジェクトを作成する必要があります。挿入メソッドに渡します。このソリューションは、両方の問題を1つで解決します。

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

あなただけのコンテンツ値は、ループのようなオブジェクトを挿入して、データベースのストレージをスピードアップしますので、上記のコードのトランザクションで使用されて渡すことができます。

関連する問題