java - Android 批量插入或忽略 JSONArray

标签 java android arrays sqlite insert

我正在从应用程序中的 ajax 调用接收 JSONArray 数据。在我的应用程序中的 SQLite 表上执行插入/冲突跳过的最佳方法是什么?我有以下代码:

try {
    JSONArray data = response.getJSONArray("data");
    ContentValues contentValues = new ContentValues();

    // I don't know what to do here. 
    // Do I do a for loop and convert the entire JSONArray into ContentValues 
    // with the column name and value for each item in the array? 

    db.insertWithOnConflict("Data", null, data, SQLiteDatabase.CONFLICT_IGNORE);

} catch (JSONException e) {
    e.printStackTrace();
}

最佳答案

是的,您必须编写一个循环来将 JSONArray 中的数据转换为插入到数据库中。如果您使用的库可以自动执行此操作,那么它实际上并没有减少数据处理的时间,对吧?

但是,您可以通过一个数据库事务来最大限度地减少对数据库表的插入操作,如下所示。

SQLiteDatabase db = ...
db.beginTransaction();
try {
    // do ALL your inserts here
    db.setTransactionSuccessful()
} finally {
    db.endTransaction();
}

您还可以考虑使用 AsyncTask 在后台线程中执行所有这些操作。

希望有帮助。

关于java - Android 批量插入或忽略 JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55941368/

相关文章:

android - CSS 媒体查询未按预期运行

android - startActivityForResult 是如何工作的?

JavaScript 数组和作用域

ruby-on-rails - 在 Ruby on Rails 中推送到数组

c++ - _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误

java - 使用 talend open studio 解析日期会引发错误

java - 使用 Criteria + 投影时在 getter 中包含代码

java - Android - 在相机和图库 Intents 之后裁剪会产生奇怪的结果

java - 不使用 API 函数对 String 的 unicode 值求和(String.length 除外)

java - 获取Android中任何文件的真实文件路径