2016-06-29 2 views
0

Я пытаюсь сохранить некоторые данные в базе данных sqlite в моем ионном приложении. Я создаю БД и одну таблицу со следующим кодом:

var db = null; 

angular.module('starter', ['ionic', 'starter.controllers', 'ngCordova', 'slick']) 

.run(function($ionicPlatform, $cordovaSQLite) { 
    $ionicPlatform.ready(function() { 
    if (window.cordova && window.cordova.plugins.Keyboard) { 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
     cordova.plugins.Keyboard.disableScroll(true); 
    } 
    if (window.StatusBar) { 
     StatusBar.styleDefault(); 
    } 
    if (window.cordova) { 
     db = $cordovaSQLite.openDB({ name: "kog.db" }); 
     $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)"); 
     console.log("android");  
    } else { 
     db = window.openDatabase("kog.db", '1', 'kog', 1024 * 1024 * 100); // browser 
     db.transaction(function (tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)'); 
     }); 
     console.log("browser"); 
    } 
    }); 
}) 

Когда я тестирую мое приложение, БД не создается. Ни на моем мобильном устройстве с плагином SQLite, ни при тестировании приложения в Chrome с window.openDatabase.

Любой совет, что я делаю неправильно?

Благодарим за помощь! Cara

+0

Там никого нет там wh o мог бы посоветовать? – CaraMar

+1

sqlite не будет работать с браузером AT ALL. Он вызывает собственные функции, которые просто не поддерживаются в браузере. – VSG24

+0

Тот же выпуск. DB, работающий на хроме, не на устройстве i.e android –

ответ

0

Код $ cordovaSQLite в контроллере должен лежать в пределах функции ионной готовности или функции deviceready (функция deviceready предпочтительнее, поскольку функция ионной готовности иногда не срабатывает), иначе я видел, как она выдавала ошибку.

Ваш метод использования openDB верен, который находится в функции запуска. Хотя в идеале он также должен иметь инструкцию try catch.

Для получения большей ясности ознакомьтесь с файлами www/index.html и www/js/app.js моего репозитория.

РЭПО находится в https://github.com/vibhutewary/ionic_ngcordova_sqlite_todo

Вы найдете уже построенный APK в «платформы/Android/строительство/выходов» папку в примере. После загрузки кода я протестировал команду «ionic run android», и она отлично работает.

Версия 2 вышеуказанной заявки находится в хранилище «ionic_ngcordova_sqlite_todos_version_2» моей учетной записи github. Это ту же функциональность, но использует методы Ionic Framework (улучшенный CSS и т. Д.).

Также я бы рекомендовал использовать функцию alert(), чтобы проверить, выполняется ли код в функции успеха openDB. Это может быть в заявлении try catch.


Хорошо как обновление: Я делюсь ссылкой на пример голых костей openDB и INSERT, SELECT здесь. Он использует предупреждение для уведомления о создании db, а затем оповещения, если значение вставлено. Затем он предупреждает вставленное значение с помощью инструкции SELECT.

Пожалуйста, обратитесь к файлам www/index.html и www/js/app.js для кода. Репозиторий git находится на https://github.com/vibhutewary/ionic_ngcordova_sqlite_creatdb_insert_select

Я загрузил репозиторий «ionic_ngcordova_sqlite_creatdb_insert_select» и запускал «ионный бег андроида», и он работает правильно. Репозиторий имеет уже построенный apk в папке «/ platform/android/build/output» (это будет отменено в команде «ionic run android»). В примере здесь создается БД, затем в контроллере тестовое сообщение вставляется в таблицу, а затем предупреждение() используется для отображения результата SELECT из таблицы.

Чтобы проверить, создана ли база данных или нет, вы можете использовать метод checkFile.

Вы можете увидеть вышеупомянутый файл www/js/app.js файла «ionic_ngcordova_sqlite_creatdb_insert_select» для использования, поскольку он вызывает метод «cordova.file.applicationStorageDirectory».

Обратите внимание, что база данных находится в папке «базы данных» в этой папке «applicationStorageDirectory».

Вы также можете обратиться к этому сообщению, которое показывает использование applicationStorageDirectory в: Sqlite: check if database exist

Edit: я видел, что Ионное Framework сбоя на некоторых телефонах на старте (протестировано по телефону «PHICOMM C630»), так что я удалил Ионные Framework и включал только библиотеки ngCordova и AngularJS. Результирующее решение было в моем репозитории под названием «corodova_ngcordova_angularjs_jquerymobile_todos». Это приложение Todo с обработкой SQLite DB. Для того, чтобы запустить решение без здания, типа «Cordova запуска андроида»

0

Попробуйте использовать это: Cordova-SQLITE-доб

https://github.com/litehelpers/cordova-sqlite-ext

После добавления этот плагин для вашего приложения просто написать следующий код в файле index.html приложения и протестируйте его.

<script type="text/javascript" charset="utf-8" src="lawnchair.js"></script> 
<script type="text/javascript" charset="utf-8"> 
     document.addEventListener("deviceready", onDeviceReady, false); 

     function onDeviceReady() { 
      var db = window.sqlitePlugin.openDatabase({ name: "dbtesting.db", location: 'default' }); 
      db.transaction(function(tx) { 
       tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key AUTOINCREMENT, data text, data_num integer)'); 

       tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["SINORISE 2", 100], function(tx, res) { 
        alert("insertId: " + res.insertId + " -- should be valid"); 
        db.transaction(function(tx) { 
         tx.executeSql("SELECT data FROM test_table;", [], function(tx, res) { 
          console.log("res.rows.length: " + res.rows.length + " -- should be > 1"); 
          window.external.notify("res.rows.item(0).data: " + res.rows.item(0).data + " -- should be TEXT"); 
         }, function(e) { 
          window.external.notify("ERROR: " + JSON.stringify(e) + " : " + e.message); 
          console.log("ERROR: " + JSON.stringify(e) + e.message); 
         }); 
        }); 
       }, function (e) { 
        window.external.notify("ERROR: " + JSON.stringify(e) + " : " + e.message); 
        console.log("ERROR: " + JSON.stringify(e) + e.message); 
       }); 
      }, function (e) { 
       console.log("ERROR INDEX: " + JSON.stringify(e)); 
      }); 
     } 
    </script> 
0

Ваш код имеет две ошибки один в создании базы данных для устройства и один в создании базы данных в браузере. ниже - это решение как

Некоторые устройства Android ограничивают использование параметра местоположения вместе с именем базы данных. Таким образом, обеспечить параметр Расположение Изменение этой линии

db = $cordovaSQLite.openDB({ name: "kog.db" }); 

в

db = $cordovaSQLite.openDB({ name: "kog.db", location : 1 }); 

и для поддержки браузера вы должны изменить эти строки

db = window.openDatabase("kog.db", '1', 'kog', 1024 * 1024 * 100); // browser 
     db.transaction(function (tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)'); 
     }); 

в

$cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS teams (id integer, title text, day text, fromtime text, totime text, location text)'); 
Смежные вопросы