Was ist der einfachste Weg, um eine SQLite SQL -Datei in eine Web -SQL -Datenbank zu importieren

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

Frage

Vielleicht fehlt mir etwas, aber ich brauche eine clientseitige Datenbank, die mit einer Last von Daten vorgeladen ist.

Um zu testen, ob clientseitige Datenbanken der Aufgabe entsprachen, habe ich ein paar Dummy -Tabellen mit Dummy -Daten mithilfe der erstellt transaction.executeSql() Methode. Aber nach dem, was ich sammeln kann, erfordert es einen executesQL -Aufruf für jede einzelne Erstellungstabelle und einfügen in die Abfrage. Ich bin faul und das scheint mir zu viel Arbeit zu sein.

Ich frage mich ...: Ich kann eine SQLite -Tabelle ziemlich schnell mit einer SQLite -GUI erstellen. Ich habe versucht, eine SQL -Datei zu exportieren und alles in einer executesQL -Anweisung auszuführen, aber das verarbeitet nur das erste "Tisch erstellen", ohne die Einfügungen zu bit.

Gibt es eine spezielle Methode des Transaktionsobjekts, die mir nicht bekannt ist, mehrere Abfragen gleichzeitig auszuführen?

Dies ist für mobile safari kaufen, die Laut Apple Verwendet eine SQLite -Datenbank, um ihre Client -Side -Datenbank -Sachen mit Strom zu versorgen.

War es hilfreich?

Lösung

Ich stelle den gesamten SQL -Code in eine Datei mit einem Befehl pro Zeile ein und benutzte AJAX, um Datei zu ziehen und über jede Zeile zu schleifen, in der die SQL ausführt

TIPP: Verwenden Sie die Existent, wenn nicht, damit Sie es jedes Mal anrufen können, um Ihre Datenbank zu initieren

Andere Tipps

Verwenden Sie auf der Befehlszeile (in einem Linux -Box)

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

Jetzt haben Sie die SQLite -Datei in eine einfache SQL -Datei abgeladen. Es enthält die Tischanweisungen erstellen und die Anweisungen einfügen.

Dann, ein Clientside -Code (muss wahrscheinlich etwas anpassen, aber Sie werden die Idee bekommen)

Schnapp dir zuerst die SQL -Dump. (Beispiel mit 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'); 
});

Die ProzessQuery -Funktion verarbeitet alle Anweisungen nacheinander und ignoriert stillschweigend Fehler.

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!");
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top