繁体   English   中英

从Sqlite数据库Cordova应用程序中选择数据

[英]Select Data from Sqlite Database Cordova Application

您好,我正在构建一个Cordova android应用程序,我需要一些帮助来选择我首先插入到DB中的数据。它返回'no such table: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);
        });
    }
}

代码上的问题是,您假定所有操作都是同步完成的,因此在调用函数时,它会立即完成。 而是executeSql和其他数据库函数将回调函数作为其参数,在执行查询时将调用它们。 你应该看看教程,如让熟悉这些概念。

基本上看起来像这样

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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM