Cordova 如何使用window.openDatabase访问phonegap中的旧数据库?

Cordova 如何使用window.openDatabase访问phonegap中的旧数据库?,cordova,Cordova,我阅读了PhoneGap开发页面中的存储教程。 在本例中,它使用了window.openDatabase两次。但是文档说openDatabase返回一个新的db对象,我想这个示例的目标是生成一个新的db,然后访问它以获取数据。但是为什么它两次创建一个新的db对象呢 <!DOCTYPE html> <html> <head> <title>Storage Example</title> <script type

我阅读了PhoneGap开发页面中的存储教程。 在本例中,它使用了window.openDatabase两次。但是文档说openDatabase返回一个新的db对象,我想这个示例的目标是生成一个新的db,然后访问它以获取数据。但是为什么它两次创建一个新的db对象呢

<!DOCTYPE html>
<html>
  <head>
    <title>Storage Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova-1.8.1.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for Cordova to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // Populate the database 
    //
    function populateDB(tx) {
        tx.executeSql('DROP TABLE IF EXISTS DEMO');
        tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
    }

    // Query the database
    //
    function queryDB(tx) {
        tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
    }

    // Query the success callback
    //
    function querySuccess(tx, results) {
  console.log("Returned rows = " + results.rows.length);
  // this will be true since it was a select statement and so rowsAffected was 0
  if (!results.rowsAffected) {
    console.log('No rows affected!');
    return false;
  }
  // for an insert statement, this property will return the ID of the last inserted row
  console.log("Last inserted row ID = " + results.insertId);
    }

    // Transaction error callback
    //
    function errorCB(err) {
        console.log("Error processing SQL: "+err.code);
    }

    // Transaction success callback
    //
    function successCB() {
        var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); //Why create a new DB again??
        db.transaction(queryDB, errorCB);
    }

    // Cordova is ready
    //
    function onDeviceReady() {
        var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
        db.transaction(populateDB, errorCB, successCB);     //upon the success of create a database, jump to successCB
    }

    </script>
  </head>
  <body>
    <h1>Example</h1>
    <p>Database</p>
  </body>
</html>

存储示例
//等待Cordova加载
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//填充数据库
//
函数填充B(tx){
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO(id unique,data));
tx.executeSql('插入演示(id,数据)值(1,“第一行”);
tx.executeSql('插入演示(id,数据)值(2,“第二行”);
}
//查询数据库
//
函数queryDB(tx){
tx.executeSql('SELECT*FROM DEMO',[],querySuccess,errorCB);
}
//查询成功回调
//
函数查询成功(发送,结果){
log(“返回的行=“+results.rows.length”);
//这将是真的,因为它是select语句,所以rowsAffected为0
如果(!results.rowsAffected){
log('没有受影响的行!');
返回false;
}
//对于insert语句,此属性将返回上次插入行的ID
console.log(“上次插入的行ID=“+results.insertId”);
}
//事务错误回调
//
函数errorCB(err){
log(“错误处理SQL:+err.code”);
}
//事务成功回调
//
函数successCB(){
var db=window.openDatabase(“Database”,“1.0”,“Cordova Demo”,200000);//为什么要再次创建新的数据库??
数据库事务(查询数据库、错误数据库);
}
//科尔多瓦准备好了
//
函数ondevicerady(){
var db=window.openDatabase(“数据库”,“1.0”,“Cordova演示”,200000);
db.transaction(populateDB,errorCB,successCB);//创建数据库成功后,跳到successCB
}
例子
数据库


调用window.openDatabase将返回一个新的db对象,但如果您要求相同的数据库名称,在本例中为“数据库”,则每个db对象将引用相同的物理数据库。

另一个好问题是:为什么要打开数据库两次?只需执行一次,然后全局存储返回的对象

var db;
document.addEventListener("deviceready", function() {
    db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
}, false);
我也有同样的问题:你有什么解决办法吗