2017-03-28 11 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);

このコードログ「NULL」と私は私のデータベースにデータを持っているので、私は理由を知りません。また、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; 
    }; 
}); 
関連する問題