您好我正在建立一个Cordova Android应用程序,我需要一些帮助来选择我首先在DB中插入的数据。它返回'没有这样的表:trav'。在此先感谢您的帮助。
此致
trav_edit.js
document.addEventListener("deviceready", onDeviceReady, false);
//var Donn_O;
function CreationTravail() {
SuiviFct('creation travail');
try {
//================ DONNEES =============================================
//--- Nom de la base de données
T_Base = 'capitech';
//--- Nom de la table et des colonnes
T_Tabl = 'trav';
var Colo_A = {'T_Trav': 'text', 'N_Dure': 'numeric'};
//--- Données a insérer
Donn_A = {'T_Trav': 'bonjour', 'N_Dure': 1};
//--- Données a extraire
Colo_A = new Array('C_Trav', 'T_Trav', 'N_Dure');
T_Cond = '';
//================ TRAITEMENT ==========================================
SuiviFct('Creation de la base : Debut');
CreationBase(T_Base);
SuiviFct('Creation de la base : Ok');
SuiviFct('Creation de la table : Debut');
CreationTable(T_Tabl, Colo_A);
SuiviFct('Creation de la table : OK');
SuiviFct('Insertion des données : Debut');
InsertionDonnees(T_Tabl, Donn_A);
SuiviFct('Insertion des données : OK');
SuiviFct('lecture des données : Debut');
LectureLigne(T_Tabl, T_Cond, Colo_A);
SuiviFct('Lecture des données : Ok');
}
catch (err) {
SuiviFct('CreationTravail-Erreur: ' + err.message);
}
}
function AfficheDonnees(Donn_O) {
try {
//---- Données
document.getElementById('T_Trav_D').innerHTML = Donn_O.T_Trav;
document.getElementById('N_Dure_D').innerHTML = Donn_O.N_Dure;
//---- Libelés
document.getElementById('T_Trav_L').innerHTML = 'Titre:';
document.getElementById('N_Dure_L').innerHTML = 'Durée:';
}
catch (err) {
SuiviFct('AfficheDonnees-Erreur: ' + err.message);
}
}
sqli.js
var Base_R; //--- Ressource pour acces a la base de données
var B_Sql = 1; //--- Permet de couper la connexion a la base de données
//var Donn_O; //+++ Donnees (NE SERT PLUS)
function CreationBase(T_Base) {
if (B_Sql == 1) {
if (window.sqlitePlugin !== undefined) {
Base_R = window.sqlitePlugin.openDatabase({name: T_Base});
} else {
// For debugging in simulator fallback to native SQL Lite
Base_R = window.openDatabase(T_Base, "1.0", "Cordova Demo", 200000);
}
}
}
function CreationTable(T_Tabl, Colo_A) {
//--- Creation table T_Tabl
//--- Ajout des colonnes qui sont dans Colo_A
T_Clef = 'C_' + T_Tabl.substr(0, 1).toUpperCase() + T_Tabl.substr(1, 4);
T_Colo = T_Clef + ' integer primary key';
for (T_Cham in Colo_A) {
T_Colo = T_Colo + ', ' + T_Cham + ' ' + Colo_A[T_Cham];
}
T_Requ = 'CREATE TABLE IF NOT EXISTS ' + T_Tabl + ' (' + T_Colo + ')';
if (B_Sql == 1) {
Base_R.transaction(function (tx) {
tx.executeSql(T_Requ);
}, function (e) {
SuiviFct('Erreur:' + e.message);
});
}
}
function InsertionDonnees(T_Tabl, Donn_A) {
T_Colo = '';
T_Vale = '';
for (T_Donn in Donn_A) {
T_Colo = T_Colo + ',' + T_Donn;
T_Vale = T_Vale + ',"' + Donn_A[T_Donn] + '"';
}
$T_Requ = "INSERT INTO " + T_Tabl + " (" + T_Colo.substr(1) + ") VALUES (" + T_Vale.substr(1) + ")";
SuiviFct($T_Requ);
if (B_Sql == 1) {
Base_R.transaction(function (tx) {
tx.executeSql($T_Requ);
}, function (e) {
SuiviFct('Erreur:' + e.message);
});
}
}
function LectureLigne(T_Tabl, T_Cond, Colo_A) {
if (T_Cond.length > 1)
T_Cond = ' WHERE ' + T_Cond;
T_Colo = '';
for (i = 0; i < Colo_A.length; i++) {
T_Colo = T_Colo + ',' + Colo_A[i];
}
T_Requ = "SELECT " + T_Colo.substr(1) + " FROM " + T_Tabl + T_Cond;
SuiviFct(T_Requ);
if (B_Sql == 1) {
Base_R.transaction(function (tx) {
tx.executeSql(T_Requ, [], function (tx, res) {
SuiviFct('T_Trav:' + res.rows.item(0).T_Trav);
SuiviFct('N_Dure:' + res.rows.item(0).N_Dure);
Donn_O = res.rows.item(0);
AfficheDonnees(Donn_O);
});
}, function (e) {
SuiviFct('Lecteur :' + e.message);
});
}
}
答案 0 :(得分:0)
您的代码的问题在于您假设所有内容都是同步完成的,因此当您调用函数时,它会立即完成。相反, executeSql 和其他数据库函数将callback函数作为执行查询时调用的参数。您应该查看this等教程,以熟悉这些概念。
基本上它看起来像这样
db.transaction(function (tx) {
tx.executeSql('INSERT ... '), [], function (tx, results) {
tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
// here you now can see the items first inserted.
}, null);
}, null);
});