Какой самый простой способ импортировать файл SQLite SQL в базу данных WEB SQL - PullRequest
7 голосов
/ 14 мая 2010

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

Чтобы проверить, соответствуют ли задачи базы данных на стороне клиента, я создал несколько фиктивных таблиц с фиктивными данными, используя метод transaction.executeSql(). Но из того, что я могу собрать, он требует вызова executeSQL для каждого отдельного запроса CREATE TABLE и INSERT INTO. Я ленивый, и это кажется мне слишком большой работой.

Мне интересно ...: я могу довольно быстро создать таблицу SQLite, используя графический интерфейс SQLite. Я попытался экспортировать файл SQL и запустить его все в одном операторе executeSQL, но он просто обрабатывает первый бит CREATE TABLE ни одной из вставок.

Есть ли какой-то особый метод объекта транзакции, о котором я не знаю, для запуска нескольких запросов одновременно?

Это для Mobile Safari, который , согласно Apple , использует базу данных SQLite для поддержки своих клиентских баз данных.

Ответы [ 2 ]

13 голосов
/ 05 августа 2012

В командной строке (в окне 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!");
  }
}
2 голосов
/ 27 сентября 2010

Я поместил весь SQL-код в файл с одной командой на строку, затем использовал ajax для извлечения файла и циклического перебора каждой строки, выполняя sql

совет: используйте if not not, чтобы вы могли вызывать его каждый раз для инициализации вашей базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...