2015-08-02 11 views
5

Utworzono fabrykę z funkcją, która dostarcza zapytanie do $cordovaSQLite.execute. Jestem pewien, że zapytanie jest poprawne, ponieważ uruchamiam to poprawnie w bazie danych za pomocą SQLiteBrowser w tym działa doskonale. W konsoli mam komunikat informujący, że baza danych została otwarta. Ale ta funkcja nie zwraca danych, których potrzebuję.W jaki sposób mogę poprawić instrukcję przygotowania nie powiodło się z błędem: "1" - używając SQLite?

Otrzymałem ten błąd: instrukcja przygotowania nie powiodła się z błędem: 1.

To jest mój kod:

factotyDatabase.js 
var app = angular.module('anotei'); 

app.factory('factoryDatabase', function($cordovaSQLite, $ionicLoading, $q){ 

var currentDB = undefined; 
var DATABASE_NAME = 'anotei.db'; 
var PATH = 'anotei.db'; 

return{ 
    init: function(){ 
     if(currentDB == undefined){ 
      currentDB = window.sqlitePlugin.openDatabase({ 
       name: DATABASE_NAME, 
       createFromResources: PATH 
      }); 
     } 
     return currentDB; 
    }, 

    executeQuery: function(deliveredQuery, fields){ 
     var defer = $q.defer(); 
     $ionicLoading.show(); 

     var resp = $cordovaSQLite.execute(currentDB, deliveredQuery, fields); 
     resp.then(
      function(execution){ 
       defer.resolve(execution); 
       $ionicLoading.hide(); 
      }, 
      function(error){ 
       $ionicLoading.hide(); 
        defer.reject(error); 
        console.log(error); 
       } 
      ); 
      return defer.promise; 
     } 


    } 
}); 

// This is the service with the function that calls the factory 

var app = angular.module('anotei'); 

app.service('serviceSubject', function($q, factoryDatabase){ 

    return{ 
     getSubjects: function(){ 
     var defer = $q.defer(); 

     var resp = factoryDatabase.executeQuery('select * from materias'); 

     resp.then(
      function(resultSet){ 
       var listMateria = []; 

       for(var i = 0; i < resultSet.rows.length; i++){ 
        var materia = {}; 

        materia.id_materia = resultSet.rows.item(i).id_materia; 
        materia.nome = resultSet.rows.item(i).nome; 
        materia.max_faltas = resultSet.rows.item(i).max_faltas; 
        materia.professor = resultSet.rows.item(i).professor; 
        materia.email_prof = resultSet.rows.item(i).email_prof; 
        materia.num_faltas = resultSet.rows.item(i).num_faltas; 

        listMateria.push(materia); 
       } 
       defer.resolve(listMateria); 
      }, 
      function(error){ 
       console.log(error); 
       } 
      ); 

      return defer.promise; 
     } 
    } 

}); 
+0

Jeszcze jedna informacja. CordovaSqlitePlugin był już zainstalowany w moim projekcie. –

+1

Nie widzę, żebyś zadzwonił do funkcji "Init" swojej fabryki? – PeterPan

Odpowiedz