私はSQLiteデータベースを使用するAndroid Cordova/Phonegapアプリケーションを開発しています。私は公式documentationの例を使用しました。AndroidとPhonegapを使用したSQLiteデータベースの格納
// Wait for device API libraries to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Populate the database
//
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}
// Query the database
//
function queryDB(tx) {
tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}
// Query the success callback
//
function querySuccess(tx, results) {
var len = results.rows.length;
console.log("DEMO table: " + len + " rows found.");
for (var i=0; i<len; i++){
console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i).data);
}
}
// Transaction error callback
//
function errorCB(err) {
console.log("Error processing SQL: "+err.code);
}
// Transaction success callback
//
function successCB() {
var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(queryDB, errorCB);
}
// device APIs are available
//
function onDeviceReady() {
var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
}
これは(データベースが作成され、満たされたエラーなし、と私は、クエリをバック書き込まれたデータを取得している)動作しているようですが、私は、データベースが私のデバイス上に保存されているかと思いまして。デバッグのために、私はAndroid 4.1.1でハードウェア電話を使用します。
データベースは/data/data/<myapppackage>/app_database/file__0/0000000000000001.db
の下にあります。今私はデータベースをエクスポートし、SQLiteManagerを使って自分のPCで手動で分析したかったのですが、変更がdbファイルに書き込まれていないようです。ディレクトリ/data/data/<myapppackage>/app_database/file__0/
を調べるとき
0000000000000001.db-shm
と
0000000000000001.db-wal
を見つけましたが、決してDBファイルそのもの。
私の質問は、変更が永続データベースファイルに書き込まれないのはなぜですか? phonegapとのデータベース接続を閉じる方法はないようで、アプリケーションを手動で終了させても変更は.dbファイルに書き込まれません。私は何が間違っていたのか分かりません。
誰でもこの問題を確認できますか?
にSQLiteのプラグインをインストールします。これは、ソリューションではありません上記のディレクトリにあります。しかし、私はこの問題を解決したと考えています。なぜなら、私がもう記述した振る舞いを再現できないからです。 Androidがデータベースを閉じるのを妨げる何かがあったようだが、私はそれが何であったのかわからない。 – qefzec
アプリケーションの実行中にデータベースをphonegapするためにアンドロイドデータベースを使用する必要があります。 – AndyBoy