Cordova SQLite类 - 无法从数据库返回值

时间:2017-03-28 15:17:17

标签: sqlite cordova

因此,我正在使用Cordova和SQLite构建应用程序,以下是我创建的用于处理数据库属性和方法的对象。



function Storage(connection, platform)
{
    if (platform == 'mobile') {
        this.db = window.sqlitePlugin.openDatabase({name: connection.name, location: connection.location});
    } else if (platform == 'web') {
        this.db = window.openDatabase(connection.name, connection.version, connection.mode, -1);
    }

    this.read = function(sql, vals) {
        var rows = null;

        this.db.transaction(function(tx) {
            tx.executeSql(sql, vals, function(tx, res) {
                rows = res.rows;
            });
        }, function(error) {
            console.log('Transaction error: '+error.message);
        });

        return rows;
    };
};

var connection = {
    name: 'database.db',
    version: '1.0',
    mode: 'Development'
};

var db = new Storage(connection, 'web');

var sql = '';
sql += 'SELECT *';
sql += ' FROM countdown';
sql += ' WHERE countdown_status != ?;';
var rows = db.read(sql, [1]);
console.log(rows);




此代码记录' null'我不知道为什么因为我有数据进入我的数据库。当我尝试从tx.executeSql方法中进行日志记录时,它会记录数据库中的数据。

为什么我无法从该功能中获取此数据的任何想法? 非常感谢。

1 个答案:

答案 0 :(得分:1)

db read是异步的 - 它需要将数据返回到回调函数,如下所示:

 getHighScore: function (type,callback) {

  var query = "SELECT Value FROM HighScore where Type = '" + type + "';";

playedDb.transaction(function (tx) {

 tx.executeSql(query, [], function (tx, res) {
     var out;

     if (typeof res.rows.item(0) === "undefined") {
         if (typeof callback === "function") {
           callback(-1);
           return;
         };
     } else {
         out = res.rows.item(0).Value

         //task 301 only allow alphanumeric and decimal point (for version)
         out = String(out).replace(/[^0-9a-z\.]/gi, '');

         if (typeof callback === "function") {
            callback(out);
            return;
         };
     }

 }, function (e) {
     console.log("getHighScore FAILED: " + e.message);
     if (typeof callback === "function") {
         callback(-2);
         return;
     };
 });