【问题标题】:PhoneGap SQLite error? Uncaught TypeError: Object #<Object> has no method 'exec'PhoneGap SQLite 错误?未捕获的类型错误:对象 #<Object> 没有方法 'exec'
【发布时间】:2013-02-12 11:50:38
【问题描述】:

我正在开发 Android 应用程序。我正在将 sqlite 集成到我的应用程序中 https://github.com/brodyspark/PhoneGap-sqlitePlugin-Android 下面的错误来了

Uncaught TypeError: Object # has no method 'exec'

使用以下代码时

window.sqlitePlugin.openDatabase({name: "DB"});

【问题讨论】:

  • 为什么不用官方的websql api? docs.phonegap.com/en/2.4.0/…
  • 但是我们正在迁移到 SQLite 限制为 5MB
  • 我不认为这是正确的。官方的 websql api 还提供了一个默认大小为 5MB 的 SQLite 数据库,但不限于此。你甚至可以创建一个数据库直到 500MB 我认为,请参阅:html5doctor.com/introducing-web-sql-databases
  • 是的,但有些安卓设备不接受超过 5MB。这是 web sql 中的问题。
  • @kanna 你解决了吗?我有同样的问题

标签: android sqlite cordova


【解决方案1】:

您需要确保在打开数据库之前等待 Cordova 加载。

根据README.md from the project

// Wait for Cordova to load
document.addEventListener("deviceready", onDeviceReady, false);

// Cordova is ready
function onDeviceReady() {
  var db = window.sqlitePlugin.openDatabase({name: "my.db"});
  // ...
}

【讨论】:

    【解决方案2】:

    https://github.com/xuexueMaGicK/Gift-App

    查看此链接 js 文件在此处可用 数据库连接在此处

     window.addEventListener("DOMContentLoaded", init);
    
    function init() {
    pageshow = document.createEvent("Event");
    pageshow.initEvent("pageshow", true, true);
    
    tap = document.createEvent("Event");
    tap.initEvent("tap", true, true);
    
    pages = document.querySelectorAll('[data-role="page"]');
    numPages = pages.length;
    
    links = document.querySelectorAll('[data-role="link"]');
    numLinks = links.length;
    
    //checkDB();
    document.addEventListener("deviceready", checkDB, false);
     }
    

    /************************************ 一般互动 ************************************/

     function checkDB() {
     navigator.splashscreen.hide();
    
     database = openDatabase('data', '', 'data', 1024 * 1024);
    
     if (database.version === '') {
    
        database.changeVersion('', '1.0', createDB, function (tx, err) {
            console.log(err.message);
        }, function (tx, rs) {
            console.log("Increment transaction success.");
        });
        addNavHandlers();
    } else {
        addNavHandlers();
    }
    

    }

    function createDB(db) 
    {
    
    /*******Create Table Gifts********/
    
     db.executeSql('CREATE TABLE "gifts" ("gift_id" INTEGER PRIMARY KEY AUTOINCREMENT, "name_id" INTEGER, "occasion_id" INTEGER, "gift_idea" VARCHAR(45))', [], function (tx, rs) {
        console.log("Table gifts created");
    }, function (tx, err) {
        console.log(err.message);
    });
    /*******Create Table Names********/
    db.executeSql('CREATE TABLE "names" ("name_id" INTEGER PRIMARY KEY AUTOINCREMENT, "name_text" VARCHAR(80))', [], function (tx, rs) {
        console.log("Table names created");
    }, function (tx, err) {
        console.log(err.message);
    });
    /*******Create Table Occasions********/
    db.executeSql('CREATE TABLE "occasions" ("occasion_id" INTEGER PRIMARY KEY AUTOINCREMENT, "occasion_text" VARCHAR(80))', [], function (tx, rs) {
        console.log("Table occasions created");
    }, function (tx, err) {
        console.log(err.message);
    });
    

    }

    【讨论】:

      【解决方案3】:

      在 Manifest.xml 中你必须添加与 SQLite 相关的插件。然后它就可以工作了。

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 2013-04-19
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多