2017-02-21 45 views
0

у меня есть JSONObject:вставки Json в SQLite таблице андроида

{"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 Еогеасп?

теперь использовать этот код:

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 ​​Array или создать объект Content values ​​в вашем цикле. и перейдите в метод вставки. Это решение разрешает вашу проблему в одном.

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

Вы можете передавать только Content Значения объекта, как цикл и вставить и выше кода транзакции используются так это ускорит базу данных для хранения.