2010-05-14 15 views
7

tal vez me falta algo, pero necesito una base de datos del cliente pre-poblada con una carga de datos.¿Cuál es la forma más sencilla de importar un archivo SQLite SQL en una base de datos WEB SQL

Para probar si las bases de datos del lado del cliente estaban a la altura de la tarea, creé algunas tablas ficticias con datos ficticios usando el método transaction.executeSql(). Pero por lo que puedo deducir, requiere una llamada executeSQL para cada consulta CREATE TABLE e INSERT INTO. Soy flojo, y eso me parece demasiado trabajo.

Me pregunto ...: Puedo crear una tabla SQLite bastante rápidamente usando una GUI de SQLite. Intenté exportar un archivo SQL y ejecutarlo todo en una sentencia executeSQL, pero eso solo procesa el primer bit 'CREATE TABLE', ninguna de las inserciones.

¿Hay algún método especial del objeto de transacción del que no tengo conocimiento para ejecutar múltiples consultas a la vez?

Esto es para Mobile Safari comprar el camino, que according to Apple utiliza una base de datos SQLite para alimentar sus cosas de base de datos del lado del cliente.

Respuesta

2

pongo todo el código SQL en un archivo con un comando por línea a continuación, utiliza ajax para tirar de archivo y lazo sobre cada línea de ejecutar el sql

Consejo: Utilice el si no existe por lo que se le puede llamar cada vez para inicializar la base de datos

+0

Por favor, ¿me pueden dar algunas piezas de código? Tengo el mismo problema y no puedo cargar un archivo de script sql en una base de datos web sql creada sobre la marcha. – Zakaria

13

en la línea de comandos (en una máquina Linux), utilice

sqlite3 myDatabase.sqlite .dump > myDatabase.sql 

Ahora usted tiene un archivo de SQLite objeto de dumping en un archivo sql llanura. Contendrá las sentencias create table y las instrucciones de inserción.

Entonces, un cierto código del lado del cliente (probablemente necesitarán algunos ajustes, pero usted consigue la idea)

En primer lugar, agarrar el volcado SQL. (Ejemplo 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'); 
}); 

El proceso de la función processQuery todos los estados uno por uno, y silenciosamente ignora errores.

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!"); 
    } 
} 
Cuestiones relacionadas