SQLite插件不起作用Ionic - Apache Cordova

时间:2016-04-08 10:18:04

标签: android sqlite cordova ionic-framework opendatabase

我正在使用Ionic框架为Android和IOS开发Apache Cordova应用程序,为此我需要在本地存储中有一个小数据库,我不想使用SQLite。我遵循了很多教程,事实上这很容易 - 至少它似乎 - 但我有以下错误:

Uncaught TypeError: Cannot read property 'openDatabase' of undefined        (11:52:54:666 | error, javascript)
at (anonymous function) (www/js/app.js:47:29)
at (anonymous function) (www/lib/ionic/js/ionic.bundle.js:53329:19)
at onPlatformReady (www/lib/ionic/js/ionic.bundle.js:2491:24)
at onWindowLoad (www/lib/ionic/js/ionic.bundle.js:2472:7)

发生此错误后,不会创建数据库,换句话说,它不起作用。 显然我在互联网上对此进行了研究,我找到了很多可能的解决方案,这是最能解释的解决方案,我发现这是:

TypeError: Cannot read property 'openDatabase' of undefined

但是对于我没有工作:(

引用上一个链接:

  

这是因为以下几个原因之一:

     

1.您没有将$ cordovaSQLite方法包装在$ ionicPlatform.ready()函数中。

     

2.您正在尝试从Web浏览器测试此本机插件。

     

3.您实际上没有在项目中安装基础SQLite插件。

关于我的案子:

  1. $ cordovaSQLite方法位于$ ionicPlatform.ready函数内。
  2. 我正在使用物理Android设备进行测试。
  3. 我已从以下来源在我的项目中安装了该插件:
  4. https://github.com/brodysoft/Cordova-SQLitePlugin-2014.07.git

    正如我所说,我对此进行了很多研究,但我并没有解决这个问题。

    我的代码:

    params.run(function($ionicPlatform, $cordovaSQLite) {
    $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if (window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);
    
    }
    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }
    
    db = window.sqlitePlugin.openDatabase({name: "inspeccionesDB.db"});   
    $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS table1 (id integer primary key autoincrement not null, company char(255) not null, cif char(20) not null, state char(20) not null, related_ids char(45) not null)");
    $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS table2 (id integer primary key not null, code char(20) not null, firstname char(20) not null, surname char(100) not null, surname1 char(100) not null, nif char(20) not null, expired_passport_dt text not null, is_valid tinyint not null");
    $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS table3 (id integer primary key not null, code char(20), address char(250), location char(100), provincia(250))");    
    });
    });
    

    我将非常感谢任何建议或可能的解决方案。

    提前感谢所有人。

2 个答案:

答案 0 :(得分:1)

您收到此错误是因为您尝试从Android获取数据库连接但使用错误的函数openDatabase()。此功能将用于客户端(浏览器)。使用openDb()函数从android获取数据库连接。

    if (window.cordova) {
// device
       dbconn = $cordovaSQLite.openDB({ name: "my.db" , location: 'default'}); 
       $cordovaSQLite.execute(dbconn, "CREATE TABLE IF NOT EXISTS people (id integer primary key, firstname text, lastname text)");
    }
    else{
// browser
    dbconn = window.openDatabase("my.db", '1', 'my', 1024 * 1024 * 100);
    $cordovaSQLite.execute(dbconn, "CREATE TABLE IF NOT EXISTS people (id integer primary key, firstname text, lastname text)");

}

答案 1 :(得分:0)

您的SQLite文件不存在于浏览器中,您可以为Android添加手动代码。 请参阅此链接http://gauravstomar.blogspot.in/2011/08/prepopulate-sqlite-in-phonegap.html