Я пытаюсь получить доступ к базе данных HTML5, когда создавал приложение для Android с помощью PhoneGap + jQuery Mobile.Странно, что следующий код может получить разные результаты.Он может получить правильный результат в 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;
}