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