Какой самый простой способ импортировать файл SQLite SQL в базу данных WEB SQL
Возможно, я что-то упускаю, но мне нужна база данных на стороне клиента, предварительно заполненная загрузкой данных.
Чтобы проверить, соответствуют ли задачи на стороне клиента задачам, я создал несколько фиктивных таблиц с фиктивными данными, используя transaction.executeSql()
метод. Но из того, что я могу собрать, он требует вызова executeSQL для каждого запроса CREATE TABLE и INSERT INTO. Я ленивый, и это кажется мне слишком большой работой.
Мне интересно...: Я могу довольно быстро создать таблицу SQLite, используя графический интерфейс SQLite. Я попытался экспортировать файл SQL и запустить его все в одном операторе executeSQL, но он просто обрабатывает первый бит CREATE TABLE ни одну из вставок.
Есть ли какой-то особый метод объекта транзакции, о котором я не знаю для выполнения нескольких запросов одновременно?
Это для Mobile Safari, который, по словам Apple, использует базу данных SQLite для поддержки своих клиентских баз данных.
2 ответа
Я поместил весь SQL-код в файл с одной командой на строку, а затем использовал AJAX для извлечения файла и цикл по каждой строке, выполняя SQL
совет: используйте if not not, чтобы вы могли вызывать его каждый раз для инициализации базы данных
В командной строке (в окне Linux) используйте
sqlite3 myDatabase.sqlite .dump > myDatabase.sql
Теперь у вас есть файл sqlite, выгруженный в обычный файл sql. Он будет содержать операторы создания таблицы и операторы вставки.
Затем некоторый клиентский код (вероятно, потребуется некоторая корректировка, но вы поймете идею)
Во-первых, возьмите дамп sql. (пример использования jQuery)
$.get('./dumps/myDatabase.sql', function(response) {
// console.log("got db dump!", response);
var db = openDatabase('myDatabase', '1.0', 'myDatabase', 10000000);
processQuery(db, 2, response.split(';\n'), 'myDatabase');
});
Функция processQuery обрабатывает все операторы один за другим и молча игнорирует ошибки.
function processQuery(db, i, queries, dbname) {
if(i < queries.length -1) {
console.log(i +' of '+queries.length);
if(!queries[i+1].match(/(INSERT|CREATE|DROP|PRAGMA|BEGIN|COMMIT)/)) {
queries[i+1] = queries[i]+ ';\n' + queries[i+1];
return processQuery(db, i+1, queries, dbname);
}
console.log('------------>', queries[i]);
db.transaction( function (query){
query.executeSql(queries[i]+';', [], function(tx, result) {
processQuery(db, i +1, queries,dbname);
});
}, function(err) {
console.log("Query error in ", queries[i], err.message);
processQuery(db, i +1, queries, dbname);
});
} else {
console.log("Done importing!");
}
}