Estoy tratando de crear una base de datos para mi aplicación nativa de reacción usando SQLite de expo y seguí su documentación, pero creo que la base de datos no se está inicializando.
Documentación: expo-sqlite
Aplicación.js:
console.log("init () above"); init() .then(() => { console.log("DATABASE INITIALIZED"); }) .catch(() => { console.log("FAILED DATABSE INITIALIZATION", err); }); console.log("init () below"); //Nothing logs in consoleConsola:
init () above init () below places: Array [] Creé la promise como init() que devuelve un error si falla y cuando se resuelve registra un mensaje de éxito DATABASE INITIALIZED . Pero no obtengo ningún resultado.
ayudante/bd:
import * as SQLite from "expo-sqlite"; const db = SQLite.openDatabase("places.db"); export const init = () => { const promiseDB = new Promise((resolve, reject) => { db.transaction((tx) => { tx.executeSql( "CREATE TABLE PLACES IF NOT EXISTS places (id INTEGER PRIMARY KEY NOT NULL, title TEXT NOT NULL, imageUri TEXT NOT NULL, address TEXT NOT NULL, lat REAL NOT NULL, lng REAL NOT NULL)" ); [], () => { resolve(); }, (_, err) => { reject(err); }; }); }); return promiseDB; };No recibo ningún error y tampoco el mensaje de éxito en la consola. No sé cuál es el problema y qué estoy haciendo mal.
No escribió su función correctamente, olvidó un corchete y agregó y vació una matriz de argumentos donde no debería haberlo hecho.
También en su consulta escribió CREATE TABLE PLACES IF NOT EXISTS places . Cree que la sintaxis adecuada sería CREATE TABLE IF NOT EXISTS places .
El orden de los argumentos en la transacción es callback, errorCallback, successCallback. https://docs.expo.dev/versions/latest/sdk/sqlite/#database
El orden de los argumentos en executeSql es sqlStatement, arguments, callback, errorCallback. https://docs.expo.dev/versions/latest/sdk/sqlite/#sqltransaction
Esto debería crear su tabla:
return new Promise((resolve, reject) => { db.transaction( function (tx) { tx.executeSql("CREATE TABLE IF NOT EXISTS places (id INTEGER PRIMARY KEY NOT NULL, title TEXT NOT NULL, imageUri TEXT NOT NULL, address TEXT NOT NULL, lat REAL NOT NULL, lng REAL NOT NULL)"); }, function (error) { reject(error.message); }, function () { resolve(true); console.log('Created database OK'); } ); });Un ejemplo para cuando necesita agregar argumentos:
return new Promise((resolve, reject) => { db.transaction( function (tx) { tx.executeSql( 'SELECT * FROM TABLE_NAME WHERE name=?;', [name], function (tx, resultSet) { let data = []; for (let i = 0, c = resultSet.rows.length;i < c;i++) { data.push(resultSet.rows.item(i)); } resolve(data); }, function (tx, error) { reject(error.message); } ); }, function (error) { reject(error.message); } ); });