Insertar datos en sqlite cordova en tablas relacionadas por llaves foraneas

Estoy tratando de insertar información en una base de datos en un dispositivo móvil utilizando un plugin de cordova para hacer uso de las API'S de sqlite, pero no he podido lograrlo. Estoy desarrollando mi aplicacion usando el framework de desarrollo Ionic.

El código que tengo es el siguiente:

insertarTablas: function(db) {

            var datosPersona, datosTelefono, insertarPersona, insertarTelefono, largoPer, largoTel, i, j;

            datosPersona = [{
                cedula: 123456,
                nombre: "pepe",
                apellido: "perez"
            }];

            datosTelefono = [{
                numero: 30020025,
                cedula: 123456
            }, {
                numero: 6998877,
                cedula: 123456
            }, {
                numero: 58965475,
                cedula: 123456
            }];

            insertarPersona = "INSERT INTO Persona(cedula, nombre, apellido) VALUES(?,?,?)";
            insertarTelefono = "INSERT INTO Telefono(numero, cedula_tel) VALUES(?,?)";

            largoPer = datosPersona.length;
            largoTel = datosTelefono.length;

            for (i = 0; i < largoPer; i++) {
                $cordovaSQLite.execute(db, insertarPersona, [datosPersona[i].cedula, datosPersona[i].nombre, datosPersona[i].apellido]);
            }

            for (i = 0; i < largoTel; i++) {
                $cordovaSQLite.execute(db, insertarTelefono, [datosTelefono[i].numero, datosTelefono[i].cedula]);
            }

        }

En esta imagen diferencie con colores los procesos de insertar y consultar.

introducir la descripción de la imagen aquí

  • El color rojo es el registro que se inserto de la persona, osea el objeto persona.
  • El color verde, muestra que, muestra que inserto en tres los tres registro, partiendo siempre desde la posición 0.
  • El azul cielo, la cantidad de filas afectadas por la consulta, sabiendo que puse como criterio * que especifica a todos, y pues arrojo 1, que es la cantidad de registros.
  • Por ultimo un color morado, que muestra un solo registro en la taba de Teléfono, la cual se supone que guardo 3.

1
задан 23.12.2016, 03:30
1 ответ

Пробуй так:

var db = window.sqlitePlugin.openDatabase({name: "my.db"});

insertarPersona = "INSERT INTO Persona(cedula, nombre, apellido) VALUES(?,?,?)";
insertarTelefono = "INSERT INTO Telefono(numero, cedula_tel) VALUES(?,?)";


for (i = 0; i < largoPer; i++) {
db.transaction(function(tx) {
    tx.executeSql(insertarPersona, [datosPersona[i].cedula, datosPersona[i].nombre, datosPersona[i].apellido], function(tx, res) {
        console.log("id insertada: " + res.insertId);
    }, function(e) {
         console.log("ERROR: " + e.message);
    });
 });
}

И чтобы считать реестры

  db.transaction(function(tx) {
      tx.executeSql("select count(*) as cnt from Telefono;", [], function(tx, res) {
            console.log("cantidad de registros : "+  res.rows.item(0).cnt);
      });
  })

EDIT

consultarTelefono: function(db) { 
    var consultaTelefono; 
    consultaTelefono = "select count(*) as cnt from Telefono;";     

    $cordovaSQLite.execute(db, consultaTelefono, []).then(function(resultado) { 
      console.log(resultado.rows.item(0).cnt);
    });
}

EDIT 2

, как мы это беседуем, как кажется, ошибка не состояла, как работали консультации также, в том, что он ни консультирует эру, просто в твоем коде у тебя было присоединенное зло статья со счетчиком твоего for

for (j = 0; j < largoTel; j++) {
      $cordovaSQLite.execute(db, insertarTelefono, [datosTelefono[j].numero, datosTelefono[j].cedula]);
2
ответ дан 24.11.2019, 11:54
  • 1
    уже я издаю для того, чтобы ты смог наблюдать, что оно происходит, если он вводит, но консультация только бросает меня, что есть единственного реестра, в то время как ввождения он говорит мне, что, если я ввожу 3. – Pedro Miguel Pimienta Morales 23.12.2016, 03:26
  • 2
    Как дела, делая консультацию, чтобы видеть все реестры, есть? – sioesi 23.12.2016, 03:35
  • 3
    consultarTelefono: function(db) { var consultaTelefono; consultaTelefono = "SELECT * FROM Telefono"; $cordovaSQLite.execute(db, consultaTelefono, []).then(function(resultado) { console.log(resultado.rows.length); }); } – Pedro Miguel Pimienta Morales 23.12.2016, 03:37
  • 4
    Обновите @PedroMiguelPimientaMorales – sioesi 23.12.2016, 03:42
  • 5
    позволь мне пытаться и уже я говорю тебе учитель – Pedro Miguel Pimienta Morales 23.12.2016, 03:45