2010-05-14 10 views
7

forse mi manca qualcosa, ma ho bisogno di un database lato client prepopolato con un carico di dati.Qual è il modo più semplice per importare un file SQLite SQL in un database SQL WEB

Per verificare se i database lato client fossero all'altezza dell'attività, ho creato alcune tabelle fittizie con dati fittizi utilizzando il metodo transaction.executeSql(). Ma da quello che posso raccogliere, richiede una chiamata executeSQL per ogni singola query CREATE TABLE e INSERT INTO. Sono pigro, e mi sembra troppo lavoro.

Mi chiedo ...: riesco a creare una tabella SQLite abbastanza rapidamente utilizzando una GUI SQLite. Ho provato ad esportare un file SQL e ad eseguirlo tutto in un'unica istruzione executeSQL ma questo elabora solo il primo bit "CREATE TABLE" nessuno degli inserti.

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

Questo è per Safari Safari acquistare il modo, che according to Apple utilizza un database SQLite per alimentare il proprio lato del client roba di database.

risposta

2

ho messo tutto il codice SQL in un file con un solo comando per riga poi utilizzato ajax per tirare di file e un ciclo su ogni linea di eseguire lo sql

consiglio: utilizzare il se non esiste così si può chiamare ogni volta a init il database

+0

Per favore, è possibile fornire alcuni pezzi di codice? Ho lo stesso problema e non riesco a caricare un file di script sql in un database web sql creato al volo. – Zakaria

13

Sulla riga di comando (in una scatola di linux), utilizzare

sqlite3 myDatabase.sqlite .dump > myDatabase.sql 

Ora avete il file SQLite scaricato in un file sql pianura. Conterrà le istruzioni create della tabella e le istruzioni di inserimento.

Poi, un po 'di codice lato client (probabilmente bisogno di un po di regolazione, ma si otterrà l'idea)

In primo luogo, afferrare il dump sql. (Esempio utilizzando 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'); 
}); 

Il processo funzione processQuery tutte le istruzioni una per una, e silenziosamente ignora gli 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!"); 
    } 
} 
Problemi correlati