PhoneGap + jQuery Mobileを使用してAndroid Appを構築しているときにHTML5データベースにアクセスしようとしています。次のコードでは異なる結果が得られることは奇妙です。 Galaxy S 2.2(chris、lulu、chris)では正しい結果を得ることができますが、Cliq TX(Android 2.1)ではアプリが壊れてしまい(最後の警告はcreateTable()です)、Emulator 2.3では最初の警告でアプリがクラッシュしました。私はデータベースを取り出し、正しく作成されていることがわかりました。これらの問題を説明するのは難しいと思います。そのような単純なコードがなぜ多くの問題を引き起こすのですか?誰かがデータベースへのアクセスに成功しましたか?PhoneGap + jQuery Mobile access HTML5 AndroidでのSqliteデータベースの問題
ありがとうございます。
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;
}
こんにちはノースクリエイティブ、ご返信ありがとうございますが、私はあなたをかなり理解していません。なぜあなたはerrorHandlerを置くのですか?より詳細な答えを教えてください。ありがとうございました!クリス – ThinkChris
ああ、申し訳ありません - うさぎ。 errorHandlerは、エラーが発生した場合のコールバックです。これを削除するか、コードに追加することができます。function errorHandler(トランザクション、エラー){console.log( 'エラーが発生しました');} ' – TNC