将Json插入sqlite表android

时间:2017-02-21 12:10:01

标签: android json android-sqlite

我有一个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);
                        }
                    }
                }

但我想要最快捷,更好的方式

2 个答案:

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