Qual é a maneira mais simples de importar um arquivo SQLite SQL para um banco de dados SQL da Web

StackOverflow https://stackoverflow.com/questions/2834534

Pergunta

Talvez eu esteja perdendo alguma coisa, mas preciso de um banco de dados do lado do cliente pré-popado com uma carga de dados.

Para testar se os bancos de dados do lado do cliente estavam à altura da tarefa, criei algumas tabelas dummy com dados dummy usando o transaction.executeSql() método. Mas, pelo que posso reunir, requer uma chamada ExecutSQL para cada tabela de criação e insira na consulta. Eu sou preguiçoso, e isso parece muito trabalho para mim.

Estou me perguntando ...: posso criar uma tabela sqlite rapidamente usando uma GUI SQLite. Eu tentei exportar um arquivo SQL e executar tudo em uma instrução ExecutesQL, mas que apenas processa o primeiro bit 'Criar tabela', nenhuma das inserções.

Existe algum método especial do objeto de transação que eu não conheço para executar várias consultas de uma só vez?

Isto é para safari móvel, compre o caminho, que De acordo com a Apple Usa um banco de dados SQLite para alimentar o material do banco de dados do lado do cliente.

Foi útil?

Solução

Coloquei todo o código SQL em um arquivo com um comando por linha e usei o Ajax para puxar o arquivo e fazer um loop sobre cada linha executando o SQL

Dica: use o se não existe para que você possa chamá -lo sempre para iniciar seu banco de dados

Outras dicas

Na linha de comando (em uma caixa Linux), use

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

Agora você tem o arquivo sqlite despejado em um arquivo SQL simples. Ele conterá as instruções de tabela Create e as instruções de inserção.

Em seguida, algum código do cliente (provavelmente precisará de alguns ajustes, mas você terá a ideia)

Primeiro, pegue o dump sql. (exemplo usando 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'); 
});

O processo do processo de função do processo de todas as instruções um por um e ignora silenciosamente erros.

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!");
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top