PhoneGap + jQuery Mobile Zugriff auf HTML5 Sqlite-Datenbank-problem in Android 2.1

Ich versuche, Zugriff auf HTML5-Datenbank, wenn ich war der Bau einer Android-App mit PhoneGap + jQuery Mobile. Es ist merkwürdig, dass der folgende code kann zu verschiedenen Ergebnissen kommen. Es kann richtige Ergebnis in Galaxy S 2.2 (chris, lulu, chris),, aber in der Cliq-TX (Android 2.1) die app zerkleinert (die Letzte Warnung ist createTable()), und im Emulator 2.3 die app stürzte bei der ersten Warnung. Ich zog die Datenbank aus und fand, dass es korrekt angelegt. Ich denke, es ist schwer zu erklären, diese Probleme, warum solche einfachen codes verursachen so viele Probleme? Dosis jemand Erfolg haben, auf die Datenbank zugreifen?

Vielen Dank im Voraus.

    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;
}

InformationsquelleAutor ThinkChris | 2011-02-16

Schreibe einen Kommentar