Какой самый простой способ импортировать файл 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!");
  }
}
Другие вопросы по тегам