2017-03-06 1 views
0

Avec SQLite et Cordova sur un appareil Android.Cordova/SQLite: rowid undefined

J'ai une base de données contenant une table avec quelques champs.

Aucun des champs n'est une clé primaire. Les enregistrements ont par défaut rowid généré par SQLite.

Voici une capture d'écran de la table dans le débogueur Chrome: table in Chrome debugger

J'essaie d'accéder à cette rowid (je vous épargnerai tout le code de base de données et de se concentrer sur la requête):

tx.executeSql('SELECT * FROM ServicesRondes', [], function(tx, res) { 
    console.log(res.rows.length); // shows 5 
    if (res.rows.length > 0) { 
     for(var i = 0; i < res.rows.length; i++) { 
      console.log(res.rows.item(i).time); // shows the time record 
      console.log(res.rows.item(i).rowid); // shows undefined 
     } 
    }    
} 

Donc, le problème est que le rowid est undefined dans les journaux.

J'ai trouvé qu'un seul lien avec un gars répondant à sa propre question: https://forum.qt.io/topic/53217/solved-how-to-access-sqlite-rowid

Comme vous pouvez le voir, il a fait une requête avec rowid pour résoudre son problème.

Mais ce n'est pas vraiment ce que je veux (je veux tout sélectionner) et de plus, je ne comprends pas pourquoi cela fonctionne de cette façon et pas l'inverse.

Bien sûr, je pourrais créer mon propre champ de clé primaire auto-incrémenté mais j'aimerais l'éviter et ce n'est pas ma question.

Répondre

2

SELECT * renvoie toutes les colonnes que vous avez déclarées dans la définition de la table.

Si vous souhaitez que la colonne rowid pour afficher avec *, vous devez inclure là:

CREATE TABLE ServicesRondes (
    rowid  INTEGER PRIMARY KEY, 
    userUuid UUID, 
    secteurId UUID, 
    time  TIMESTAMP, 
    [...] 
); 
+0

Oh, merci, je ne savais pas cette chose sur les colonnes déclarées. Donc, peut-être qu'à la fin, faire ma propre colonne auto-incrémentée serait mieux que de sélectionner chaque colonne pour inclure la colonne. – Destal