12

SQLite データベースを使用したい Android Cordova/Phonegap アプリを開発しています。公式ドキュメントの例を使用しました。

// 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 ファイルに書き込まれていないようです。

ただし、ディレクトリを調べると、データベース操作を実行するたびにタイムスタンプが変更される2 つの一時ファイルと/data/data/<myapppackage>/app_database/file__0/が見つかりましたが、db ファイル自体は見つかりませんでした。0000000000000001.db-shm0000000000000001.db-wal

私の質問は、変更が永続的なデータベース ファイルに書き込まれないのはなぜですか? phonegap を使用してデータベース接続を閉じる方法はないようです。アプリを手動で強制終了しても、変更が .db ファイルに書き込まれません。何が間違っていたのかわかりません。

ここで問題を見ている人はいますか?

4

3 に答える 3

0

解決策は次のとおりです。物理デバイスの代わりにエミュレーターを使用してアプリをデバッグします。

emulator物理デバイスの代わりにアプリを実行します。databaseファイルは にあります/data/data/YOUR_PACKAGE_NAME/app_database/pullファイルを開き、databaseテーブルとデータを参照できます。

于 2013-11-01T05:22:21.613 に答える