2016-04-18 5 views
0

私はハイブリッドアプリケーションの作成にIonicを使用しています。Ionic + sqlite:iosのsqliteテーブルにアクセスできない(cordova SQLite)

私はデータベースとしてsqliteを使用しています。 Androidの場合、問題なく保存されたすべてのデータにアクセスできますが、iOSでは失敗します。私はxcodeのデバッグコンソール(私はテストのためにiPhone 6s Plusを使用しています)で次のエラーを取得します:

[debug] OPEN database: rcsappmobile.db 
[debug] Initializing SQLitePlugin 
[debug] Detected docs path: /var/mobile/Containers/Data/Application/<UUID>/Documents 
[debug] Detected Library path: /var/mobile/Containers/Data/Application/<UUID>/Library 
[debug] no cloud sync at path: /var/mobile/Containers/Data/Application/<UUID>/Library/LocalDatabase 
[debug] open full db path: /var/mobile/Containers/Data/Application/<UUID>/Library/LocalDatabase/rcsappmobile.db 
[debug] Good news: SQLite is thread safe! 
[debug] DB opened: rcsappmobile.db 

[debug] SELECT av.id, av.name FROM app_venues av WHERE av.active ORDER BY av.venuename ASC 
[debug] result: 
[debug] {"$$state":{"status":0}} 
[debug] MultipleResultHandler 
[debug] Default Error Handler -> Error processing SQL: undefined: undefined 
[debug] Default Error Handler -> Error processing SQL: 5: a statement error callback did not return false: no such table: app_venues 

これまでのところ私の問題です。

EDIT: データベースをターゲットにコピーするために使用するプラグインが、あらかじめ設定されたすべてのコンテンツを削除したようです!私はxcode経由でデータベースをチェックし、それは空でした!

私のコードです:

controllers.js:

var dashboardCtrl = function ($scope, $ionicPlatform, $cordovaDevice, DbAccess) { 
    console.log('dashboardCtrl'); 
    $ionicPlatform.ready(function() { 
    console.log('dashboard -> platform ready'); 
     DbAccess.openDb(); 
    }); 
}; 
dashboardCtrl.$inject = ['$scope', '$ionicPlatform', '$cordovaDevice', 'DbAccess']; 


var venuesCtrl = function ($scope, $ionicPlatform, $cordovaDevice, VenuesQueries) { 
    console.log('venuesCtrl'); 
    $ionicPlatform.ready(function() { 
    console.log('venue -> platform ready'); 
     VenuesQueries.getVenues().then(function(result) { 
     $scope.outputs = result; 
     var len = Object.keys(result).length; 
     if(len > 0) { 
      $scope.outputs = result; 
     } else { 
      console.log('No records found in database.'); 
     } 
     }, function(error) { 
     console.error(error); 
     }); 
    }); 
}; 
venuesCtrl.$inject = ['$scope', '$ionicPlatform', '$cordovaDevice', 'VenuesQueries']; 

service.js

var DbAccess = function ($q, $cordovaSQLite, $ionicPlatform, $cordovaDevice, $log) { 
    var DbAccess = {}; 
    var db = {}; 
    var dbName = 'rcsappmobile.db'; 
    $ionicPlatform.ready(function() { 
    console.log('Service: DbAccess -> platform ready'); 

     var platform = $cordovaDevice.getPlatform(); 
     // default: Library/LocalDatabase subdirectory - NOT visible to iTunes and NOT backed up by iCloud 
     // Library: Library subdirectory - backed up by iCloud, NOT visible to iTunes 
     // Documents: Documents subdirectory - visible to iTunes and backed up by iCloud 
     var dbLocation = 'default'; 
     if (platform === 'Android') { 
     dbLocation = 'default'; 
     } 
     console.log('dbLocation: ', dbLocation); 

     if (window.sqlitePlugin) { 

     DbAccess.openDb = function() { 
      console.log('Open database '+dbName); 
      // open database 
      function dbopen() { 
      db = window.sqlitePlugin.openDatabase({ 
       name: dbName, 
       iosDatabaseLocation: dbLocation 
      }); 
      } 
      dbopen(); 
     }; 

     DbAccess.DefaultErrorHandler = function (err) { 
      $log.log("Default Error Handler -> Error processing SQL: ", err.code + ": " + err.message); 
     }; 

     DbAccess.promisedQuery = function (query, successCB, errorCB) { 
      var deferred = $q.defer(); 
      db.transaction(function (tx) { 
      tx.executeSql(query, [], successCB(deferred), errorCB); 
      }, errorCB); 
      return deferred.promise; 
     }; 

     DbAccess.SingleResultHandler = function (deferred) { 
      return function (tx, results) { 
      var len = results.rows.length; 
      var output_results = []; 
      for (var i = 0; i < len; i++) { 
       output_results.push(results.rows.item(i)); 
      } 
      deferred.resolve(output_results[0]); 
      }; 
     }; 

     DbAccess.MultipleResultHandler = function (deferred) { 
      console.log('MultipleResultHandler'); 
      return function (tx, results) { 
      var len = results.rows.length; 
      var output_results = []; 
      for (var i = 0; i < len; i++) { 
       output_results.push(results.rows.item(i)); 
      } 
      deferred.resolve(output_results); 
      }; 
     }; 

     }  
    }); 
    return DbAccess; 
}; 
DbAccess.$inject = ['$q', '$cordovaSQLite', '$ionicPlatform', '$cordovaDevice', '$log']; 

var VenuesQueries = function (DbAccess) { 
    var VenuesQueries = { 
    getVenues: getVenues 
    }; 

    function getVenues(orderBy) { 
    if(!orderBy) { 
     orderBy = 'expires'; 
    } 
    var query = "SELECT av.id, av.name FROM app_venues av WHERE av.active ORDER BY av.venuename ASC"; 
    return DbAccess.promisedQuery(query, DbAccess.MultipleResultHandler, DbAccess.DefaultErrorHandler); 
    } 

    return VenuesQueries; 
}; 
VenuesQueries.$inject = ['DbAccess']; 

答えて

0

私はそれを解決しました。

問題は次のとおりです。2つの異なるパスを使用しました。 ソリューション全体がGithubのプラグインページに投稿されます:cordova-plugin-dbcopy

関連する問題