Domanda

Forse mi manca qualcosa, ma ho bisogno di un database lato client pre-popolato con un carico di dati.

Per verificare se i database sul lato client erano all'altezza dell'attività, ho creato alcune tabelle fittizie con dati fittizi utilizzando il transaction.executeSql() metodo. Ma da quello che posso raccogliere, richiede una chiamata EsecutesQL per ogni singola tabella di creazione e inserimento nella query. Sono pigro e mi sembra troppo lavoro.

Mi chiedo ...: posso creare una tabella SQLite abbastanza rapidamente usando una GUI SQLite. Ho provato a esportare un file SQL ed eseguendo tutto in una dichiarazione EsecutesQL, ma questo elabora semplicemente il primo bit "Crea table" nessuno degli inserti.

Esiste un metodo speciale dell'oggetto di transazione di cui non sono a conoscenza per eseguire più query contemporaneamente?

Questo è per i safari mobili acquistano la via, che Secondo Apple Utilizza un database SQLite per alimentare le cose del database lato client.

È stato utile?

Soluzione

Ho inserito tutto il codice SQL in un file con un comando per riga, quindi ho usato Ajax per tirare il file e girare su ciascuna riga in esecuzione del SQL

Suggerimento: usa se non esiste in modo da poterlo chiamare ogni volta per iniziare il tuo database

Altri suggerimenti

Sulla linea di comando (in una casella Linux), usa

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

Ora hai il file SQLite scaricato in un semplice file SQL. Conterrà le istruzioni Crea tabella e le istruzioni di inserto.

Quindi, un codice clientSide (probabilmente avrà bisogno di un po 'di regolazione, ma avrai l'idea)

Innanzitutto, prendi la discarica SQL. (Esempio 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'); 
});

La funzione ProcessQuery elabora tutte le istruzioni una per una e ignora silenziosamente errori.

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!");
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top