¿Cuál es la forma más sencilla de importar un archivo SQLite SQL en una base de datos SQL web?

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

Pregunta

Quizás me falta algo, pero necesito una base de datos del lado del cliente prepoblada con una carga de datos.

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 utilizando el transaction.executeSql() método. Pero por lo que puedo reunir, requiere una llamada Executesql para cada tabla de creación e insertar en la consulta. Soy vago, y eso me parece demasiado trabajo.

Me pregunto ...: Puedo crear una mesa SQLite con bastante rapidez usando una GUI SQLite. Intenté exportar un archivo SQL y ejecutarlo todo en una instrucción Ejecutsql, pero eso solo procesa el primer bit 'Crear tabla' ninguno de los insertos.

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

Esto es para el safari móvil comprar el camino, que Según Apple Utiliza una base de datos SQLite para alimentar sus cosas de la base de datos del lado del cliente.

¿Fue útil?

Solución

Puse todo el código SQL en un archivo con un comando por línea y luego usé AJAX para extraer el archivo y recorrer cada línea ejecutando el SQL

Consejo: use el si no existe para que pueda llamarlo cada vez para iniciar su base de datos

Otros consejos

En la línea de comandos (en un cuadro de Linux), use

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

Ahora tiene el archivo SQLite arrojado a un archivo SQL simple. Contendrá las declaraciones Crear tabla y las declaraciones de inserción.

Luego, algunos Código de Clientide (probablemente necesitará un poco de ajuste, pero obtendrá la idea)

Primero, toma el vertedero 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'); 
});

La función de procesamiento procesa todas las declaraciones una por una e ignora silenciosamente los 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!");
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top