Я использую в проекте Windows 8 (js/html) библиотеку SQLite3-WinRT https://github.com/doo/SQLite3-WinRT.
Я создаю функцию, которая вызывается в цикле for. У меня есть эта ошибка:База данных winjs sqlite заблокирована
SQLiteError: 0x800700aa: eachAsync("INSERT INTO home (id, url, cksum)VALUES (16, 'main_page_2.jpg', 'e0d046ca3421a3c2df328b293ad5981a');",) database is locked
Я думаю, что ошибка в том, что я создаю новое подключение к каждой итерации цикла, но я не понимаю другого метода. Кто может мне помочь?
Это функция:
function insertInDB(dbPath, tbName, arrayCol, arrayVal) {
SQLite3JS.openAsync(dbPath).then(function (db) {
var query = "INSERT INTO " + tbName;
var column = " (";
var values = "VALUES (";
for (var i = 0; i < arrayCol.length; i++) {
if (i == arrayCol.length - 1) {
column = column + arrayCol[i] + ")";
} else {
column = column + arrayCol[i] + ", ";
}
}
for (var i = 0; i < arrayVal.length; i++) {
if (i == arrayCol.length - 1) {
values = values + arrayVal[i] + ");";
} else {
values = values + arrayVal[i] + ", ";
}
}
query = query + column + values;
return db.eachAsync(query).done(function() {
console.log("Ok");
db.close();
},
function (error) { console.log(error); },
function (progress) { });
});
}
и это цикл, который называют предыдущую функцию:
listHome.forEach(function(value, index, array){
var valconfig = new Array(value.id, "'" + value.url + "'", "'" + value.cksum + "'");
console.log("id=" + value.id + " url=" + value.url + " ck=" + value.cksum);
insertInDB(sqlPath, "home", colconfig, valconfig);
})
В фрагменте кода, не указаны значения для аргументов «dbPath», «arrayCol» в InsertInDB, поэтому я ничего не мог предположить. Я предполагаю, что ваш SQL-запрос работает. «transaction» представляет отдельные элементы из массива listHome. то код, который я разместил, использует рекурсию для перебора значений, проверяя, достиг ли он конца массива перед планированием другой транзакции. –
Я использую ваш код, но запрос вставляет только последнее значение listhome. – user3231894
Я исправляю ошибку. Теперь у меня другая проблема. если я вызвал 2 раза функцию DBHelper.queueUpdates, у меня такая же ошибка, например: DBHelper.queueUpdates (sqlPath, "table1", colconfig, listHome); DBHelper.queueUpdates (sqlPath, "table2", lconfig, listHome); У меня есть база данных ошибок – user3231894