在移动应用程序中使用本地数据库:未定义引用错误db

时间:2014-05-06 12:16:24

标签: javascript android cordova local-storage

我正在使用Visual StudioDevExtreme frameworkCordova API开发Android应用。我的应用程序必须在线上和离线时工作。它使用涵盖在线部分的Odata Service连接到数据库。对于离线部分,我想设置一个本地数据库存储。我遵循了这个例子:http://blog.darkcrimson.com/2010/05/local-databases/这是我的代码的一部分:

首先我在视图模型中声明了一个动作,当单击一个按钮时会调用此动作。

    var viewModel = {
    dataSource: dataSource,
    viewShown: handleViewShown,
    viewDisposing: handleViewDisposing,

    ladenDatabase: function (e) {
        dataSource.select("Oid", "Dossiernr");
        dataSource.load().done(function (result) {
            //make db and fill it with objects from sql database
            initDatabase();

            alert(result[0]);
        });
    }
}

    function initDatabase() {
    try {
        if (!window.openDatabase) {
            alert("Databases are not supported in this browser.");
        } else {
            alert("Databases are supported in this browser.");
            var shortName = 'DEMODB';
            var version = '1.0';
            var displayName = 'DEMO Database';
            var maxSize = 100000; //  bytes
            DEMODB = openDatabase(shortName, version, displayName, maxSize);
            createTables();
//                selectAll();
        }
    } catch (e) {

        if (e == 2) {
            // Version number mismatch.
            console.log("Invalid database version.");
            alert("Invalid database version.");
        } else {
            console.log("Unknown error " + e + ".");
            alert("unknown error " + e + "!");
        }
        return;
    }
}

function createTables() {
    alert("Creating Tables!");
    DEMODB.transaction(
    function (transaction) {
        transaction.executeSql('CREATE TABLE IF NOT EXISTS page_settings(id INTEGER NOT NULL PRIMARY KEY, fname TEXT NOT NULL,bgcolor TEXT NOT NULL, font TEXT, favcar TEXT);', [], nullDataHandler, errorHandler);
    }
);
    prePopulate();
}

function prePopulate() {
    alert("PrePopulating !!!");
    DEMODB.transaction(
    function (transaction) {
        //Optional Starter Data when page is initialized
        var data = ['1', 'none', '#B3B4EF', 'Helvetica', 'Porsche 911 GT3'];
        transaction.executeSql("INSERT INTO page_settings(id, fname, bgcolor, font, favcar) VALUES (?, ?, ?, ?, ?)", [data[0], data[1], data[2], data[3], data[4]]);
    }
);
}

问题是,当我运行此代码时,它首先说:此浏览器支持数据库,这样做很好。当我点击这一行时发生错误:

DEMODB = openDatabase(shortName, version, displayName, maxSize);

我收到此错误消息:

  

参考错误:未定义DEMODB。

我需要在哪里定义?

0 个答案:

没有答案