2016-04-08 2 views
0

Я разрабатываю приложение Apache Cordova для Android и IOS с использованием Ionic framework, для этого мне нужно иметь небольшую базу данных в локальном хранилище, и я не буду использовать SQLite. Я следую за много учебников и на самом деле это очень легко -при мере, seems-, но у меня есть ошибки последующие:SQLite плагин не работает Ionic - Apache Cordova

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) 

После этой ошибки, база данных не создана, другими словами, это Безразлично Работает. Очевидно, что я Resarch об этом в Интернете, и я нашел много возможных решений, наиболее aproximated решение, которое может объяснить это, и я нашел это:

TypeError: Cannot read property 'openDatabase' of undefined

Но для моего не Works :(

цитата из последней ссылки:

It is happening for one of a few reasons:

1.You are not wrapping the $cordovaSQLite methods in the $ionicPlatform.ready() function.

2.You are trying to test this native plugin from a web browser.

3.You have not actually installed the base SQLite plugin into your project.

в моем случае:

  1. $ cordovaSQLite метод находится внутри функции $ ionicPlatform.ready.
  2. Я тестирую с помощью физического устройства Android.
  3. Я установил плагин на мой проект из следующего источника:

https://github.com/brodysoft/Cordova-SQLitePlugin-2014.07.git

Как я сказал, что много исследований по этому поводу, и я не achive решить эту ситуацию.

Мой код:

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

Я буду абсолютно благодарен за любые советы или возможное решение.

Заранее благодарен всем.

ответ

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)"); 

} 
Смежные вопросы