Qual é a maneira mais simples de importar um arquivo SQLite SQL para um banco de dados SQL da Web
-
26-09-2019 - |
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.
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!");
}
}