2015-08-15 3 views
1

Я новичок в Кордове. Я работаю над гибридным приложением (Targeting Android OS), где по таблицам базы данных запроса заполняются данные json, поступающие с сервера.лучший способ вставить данные в базу данных android sqlite с использованием больших json-данных, поступающих с сервера с использованием cordova

Теперь моя проблема в том, когда данные json были меньше, вставка была быстрее. Теперь размер данных JSON составляет около 40 МБ, которые я отправляю с сервера в формате Gzip, поэтому устройство может быстрее загружать данные json, но для ввода данных в таблицы базы данных требуется много времени, даже иногда он висит.

Иногда устройство закрывает приложение при вставке данных в базу данных sqlite. Я думаю, вставка занимает много памяти, что приводит к сбою приложения.

var tx = window.sqlitePlugin.openDatabase({ name: "database_name.db" }); 


tx.transaction(function(db) { 
    $.each(result[i],function(j,field){ 
     var insert_gen_code_desc = "insert or replace into table-name (id , pk_code_group , pk_code , description , created_by , created_on , updated_by , updated_on , last_update , status , lastupdate , sl_no, upload_status) values ("+result[i][j][0]['id']+",'"+result[i][j][0]['pk_code_group']+"','"+result[i][j][0]['pk_code']+"','"+result[i][j][0]['description']+"','"+result[i][j][0]['created_by']+"','"+result[i][j][0]['created_on']+"','"+result[i][j][0]['updated_by']+"','"+result[i][j][0]['updated_on']+"',"+result[i][j][0]['last_update']+",'"+result[i][j][0]['STATUS']+"','"+result[i][j][0]['lastupdate']+"',"+result[i][j][0]['sl_no']+",'0')"; 
db.executeSql(insert_gen_code_desc); 
}); 
},errorCallback, successCallback); 

Может кто-нибудь сказать мне, что я делаю неправильно из-за чего мое приложение становится разбился при вставке большого количества данных в таблицу или предложить мне какой-нибудь способ для быстрой вставки с использованием меньшего объема памяти (RAM).

Примечание: Я использую плагин com.brodysoft.sqlitePlugin для операций с базами данных sqlite.

+0

Попробуйте использовать транзакцию db при вставке большего набора данных для оптимизации вставок. –

+0

благодарит за ответ @ nikhil.thakkar. Я использую транзакцию, вы можете видеть, что мой код db.executeSql() находится внутри транзакции. Я создаю sql-запрос и выполняю запрос внутри транзакции. – AmritM

+0

Извините, я забыл. Я имел в виду это. INSERT INTO 'tablename' ('column1') VALUES ('val1'), ('val2'), ('val2'), ('val2'); Вам нужно построить такую ​​строку, а затем выполнить эту строку sql в одном выражении executeSql. Это сделает его более оптимистичным. –

ответ

0

Это известное ограничение. Версия на https://github.com/litehelpers/Cordova-sqlite-enterprise-free (которая имеет другую схему лицензирования) может обрабатывать большие транзакции. В качестве обходного пути вы можете просто хранить данные с помощью небольших, нескольких транзакций.

Смежные вопросы