2017-03-28 30 views
0

因此,我正在用Cordova和SQLite構建應用程序,下面是我創建的用於處理數據庫屬性和方法的對象存儲。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);

此代碼日誌「空」,我不知道爲什麼,因爲我有數據到我的數據庫。當我嘗試從tx.executeSql方法中登錄時,它會記錄數據庫中的數據。

有關爲什麼我無法從該功能獲取此數據的任何想法? 非常感謝。

回答

1

分貝讀是異步的 - 它需要將數據返回到一個回調函數,像這樣:

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