我正在开发一个 Android Cordova/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 手动分析它,但似乎更改没有写入 db 文件。
但是,在检查目录时,/data/data/<myapppackage>/app_database/file__0/
我发现了两个临时文件0000000000000001.db-shm
和0000000000000001.db-wal
,每次执行数据库操作时都会更改其时间戳,但不会更改 db 文件本身。
我的问题是,为什么从未将更改写入持久数据库文件?似乎没有办法关闭与 phonegap 的数据库连接,甚至手动终止应用程序也不会将更改写入 .db 文件。我不确定我做错了什么。
有人在这里看到问题吗?