Quelle est la façon la plus simple d'importer un fichier SQLITE SQL dans une base de données Web SQL

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

Question

Peut-être que je manque quelque chose, mais j'ai besoin d'une base de données côté client pré-peuplée avec une charge de données.

Pour tester si les bases de données côté client étaient à la hauteur de la tâche, j'ai créé quelques tables factices avec des données factices en utilisant le transaction.executeSql() méthode. Mais d'après ce que je peux rassembler, il nécessite un appel EXECUTESQL pour chaque table de création et insérer dans la requête. Je suis paresseux, et cela me semble trop de travail.

Je me demande ...: Je peux créer une table SQLite assez rapidement en utilisant une interface graphique SQLite. J'ai essayé d'exporter un fichier SQL et de tout exécuter dans une instruction EXECUTESQL, mais cela ne fait que traiter le premier bit «Create Table» aucun des inserts.

Existe-t-il une méthode spéciale de l'objet de transaction que je ne connais pas pour exécuter plusieurs requêtes à la fois?

C'est pour mobile safari acheter la voie, qui Selon Apple Utilise une base de données SQLite pour alimenter leurs éléments de base de données côté client.

Était-ce utile?

La solution

J'ai mis tout le code SQL dans un fichier avec une commande par ligne, puis j'ai utilisé AJAX pour extraire le fichier et boucle sur chaque ligne en exécutant le SQL

Astuce: utilisez le sinon existant pour que vous puissiez l'appeler à chaque fois pour initier votre base de données

Autres conseils

Sur la ligne de commande (dans une boîte Linux), utilisez

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

Vous avez maintenant le fichier SQLite vilé dans un fichier SQL ordinaire. Il contiendra les instructions de la table Create et les instructions d'insertion.

Ensuite, un code côté client (aura probablement besoin d'un ajustement, mais vous aurez l'idée)

Tout d'abord, prenez le vidage SQL. (Exemple en utilisant 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'); 
});

La fonction ProcessQuery traite toutes les instructions une par une et ignore silencieusement les erreurs.

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!");
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top