¿Cómo compactar las instrucciones SQL en Cordova?

Estoy creando una pequeña aplicación que usará bases de datos, quiero saber cómo convertir esto:

function testDB() { var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000); db.transaction(queryNames, errorDB); } function queryNames(tx) { tx.executeSql('SELECT name FROM people WHERE id=13', [], listNames, errorDB); } function listNames(tx, results) { for (var i=0;i<results.rows.length;i++) { alert(results.rows.item(i).name); } } function errorDB(err) { alert("Fatal error"); } 

A algo como esto (ya sea si es posible más compactado):

 function testDB() { var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000); db.transaction(queryNames('SELECT name FROM people WHERE id=13'), errorDB); } function queryNames(tx, query) { tx.executeSql(, [], function listNames(tx, results) { for (var i=0;i<results.rows.length;i++) { alert(results.rows.item(i).name); } }, errorDB); } function errorDB(err) { alert("Fatal error"); } 

En pocas palabras, estoy tratando de “reciclar” el código. Gracias por leer.

2 Solutions collect form web for “¿Cómo compactar las instrucciones SQL en Cordova?”

La llamada a SQLite es un evento. He creado la siguiente función mediante jQuery (la función también registra los resultados en la consola, por lo que necesita el complemento de consola para trabajar):

 var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000); function queryDB(query) { var start = Date.now(); var deferred = $.Deferred(); db.transaction(function (tx) { tx.executeSql(query, [], function (tx, results) { console.log("Rows: " + results.rows.length + " Time: " + (Date.now() - start) + "ms Query: " + query); deferred.resolve(results); }, function (error) { console.log("Error processing SQL: " + error.code + " " + error.no + " Query: " + query); }); }, function (error) { console.log("Transaction Error: " + error.code + " " + error.no + " Query: " + query); }); return deferred.promise(); } 

Y la llamada a la función es:

 $.when(queryDB("SELECT * FROM table")).done(function (results) { // Here your logic with the results }); 

La ventaja de esta forma es que puede llamar a varias consultas al mismo tiempo:

 $.when(queryDB("SELECT * FROM table1"), queryDB("SELECT * FROM table2")).done(function (results1, results2) { // Here your logic with the results }); 

Esto es lo que sugeriría. Cree un objeto de base de datos independiente que solo tenga un método de consulta genérico. De esa manera, puede reutilizarlo desde cualquier otro lugar en su aplicación. Algo como lo siguiente:

Aquí está el objeto de la base de datos:

 var DB = function () { this.db = window.openDatabase("Database", "1.0", "mydatabase", 2000000); }; DB.prototype.error = function () { alert("Fatal Error"); }; DB.prototype.query = function (query, callback) { this.db.transaction(function (tx) { tx.executeSql(query, [], function (tx, results) { callback(results); }); }, this.error); }; 

Y ahora puedes llamarlo para hacer tu consulta de nombres así:

 var myDB = new DB(); var namesQuery = 'SELECT name FROM people WHERE id=13'; myDB.query(namesQuery, function (results) { for (var i=0;i 

Este es solo un ejemplo básico. Es probable que desee agregar elementos adicionales para el manejo de errores / argumentos con nombre / etc.

Espero que esto ayude

  • ¿Qué almacenamiento local en html5 puedo usar de forma segura en el hilo de la interfaz de usuario del browser y en el hilo del trabajador de la web?
  • Compartir el almacenamiento dom entre http y https
  • Almacenamiento de datos comprimidos json en almacenamiento local
  • Problemas conceptuales con IndexedDB (relaciones, etc.)
  • Base de datos local precargada para Javascript (¿posible?)
  • Importar / Exportar datos localStorage de HTML5
  • Guardar y cargar datos de canvas de localStorage
  • localStorage.getItem devuelve datos antiguos en IE 9
  • Gran almacenamiento fuera de línea con Sencha Touch 2
  • Bucle y búsqueda a través de TODOS los artículos en localStorage
  • localStorage no saveá objects que contengan funciones de flecha
  • La aplicación de Chrome pierde localStorage
  • localStorage: agrega un object a una matriz de objects
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.