当我使用 PhoneGap + jQuery Mobile 构建 Android 应用程序时,我正在尝试访问 HTML5 数据库。奇怪的是,下面的代码可以得到不同的结果。它可以在 Galaxy S 2.2 (chris, lulu, chris) 中获得正确的结果,但在 Cliq TX (Android 2.1) 中,应用程序被粉碎(最后一个警报是 createTable()),而在 Emulator 2.3 中,应用程序在第一个警报时崩溃. 我把数据库拉出来,发现它是正确创建的。我认为这些问题很难解释,为什么这么简单的代码会导致这么多问题?有人成功访问数据库吗?
先感谢您。
function init() {
alert('init()');
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady() {
if (!window.openDatabase) {
alert('Local Databases are not supported.');
} else {
db = window
.openDatabase("YCHW", "1.0", "YCHW", 200000);
}
dropTable();
createTable();
insertData();
selectData();
}
function dropTable(){
alert('dropTable()');
db.transaction(
function (transaction) {
transaction.executeSql("DROP TABLE measurements;", [], nullDataHandler, errorHandler);
}
);
console.log("Table 'measurements' has been dropped.");
// location.reload();
}
function createTable(){
alert('createTable()');
db.transaction(
function (transaction) {
transaction.executeSql('CREATE TABLE IF NOT EXISTS measurements(id INTEGER NOT NULL PRIMARY KEY, user TEXT NOT NULL, date TEXT NOT NULL, height INTEGER NOT NULL, weight INTEGER NOT NULL, bmi REAL NOT NULL, abnormal INTEGER NOT NULL);', [], nullDataHandler, errorHandler);
}
);
console.log("Table 'measurements' has been created.");
}
function insertData(){
alert('insertData()');
db.transaction(
function (transaction) {
var data = ['1','chris','2000-02-22 00:00:00.000','170','60', '20', '0'];
transaction.executeSql("INSERT INTO measurements(id, user, date, height, weight, bmi, abnormal) VALUES (?, ?, ?, ?, ?, ?, ?)", [data[0], data[1], data[2], data[3], data[4], data[5], data[6]]);
data = ['2','lulu','2000-02-22 00:00:00.000','170','60', '20.12', '0'];
transaction.executeSql("INSERT INTO measurements(id, user, date, height, weight, bmi, abnormal) VALUES (?, ?, ?, ?, ?, ?, ?)", [data[0], data[1], data[2], data[3], data[4], data[5], data[6]]);
data = ['3','chris','2222-02-22 00:00:00.000','170','60', '20.12', '1'];
transaction.executeSql("INSERT INTO measurements(id, user, date, height, weight, bmi, abnormal) VALUES (?, ?, ?, ?, ?, ?, ?)", [data[0], data[1], data[2], data[3], data[4], data[5], data[6]]);
}
);
console.log("Data has been inserted.");
}
function selectData(){
alert('selectData()');
db.transaction(
function (transaction) {
transaction.executeSql('SELECT * FROM measurements;', [], dataSelectHandler, errorHandler);
}
);
console.log("Data has been selected.");
}
function dataSelectHandler(transaction, results){
alert('dataSelectHandler()');
for (var i=0; i<results.rows.length; i++) {
var row = results.rows.item(i);
var measurement = new Object();
measurement.id = row['id'];
measurement.user = row['user'];
alert(measurement.user);
}
}
function nullDataHandler(){
alert('nullDataHandler()');
console.log("nullDataHandler()");
}
function errorHandler(transaction, error){
alert('errorHandler()');
if (error.code==1){
// DB Table already exists
alert('DB Table already exists');
} else {
// Error is a human-readable string.
console.log('Oops. Error was '+error.message+' (Code '+error.code+')');
alert('Oops. Error was '+error.message+' (Code '+error.code+')');
}
return false;
}