我正在開發一個Android Cordova/Phonegap應用程序,我想使用SQLite數據庫。我使用官方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在我的電腦上手動分析數據庫,但似乎這些更改沒有寫入數據庫文件。
然而,檢查目錄/data/data/<myapppackage>/app_database/file__0/
當我發現這兩個臨時文件0000000000000001.db-shm
和0000000000000001.db-wal
,其時間戳改變我每次執行數據庫操作的時間,但從來沒有在數據庫文件本身。
我的問題是,爲什麼變化永遠不會寫入永久數據庫文件?似乎沒有辦法通過phonegap關閉數據庫連接,甚至手動關閉應用程序也不會將更改寫入.db文件。我不確定我做錯了什麼。
有人在這裏看到問題嗎?
這是解決不了問題的,因爲PhoneGap的使用的WebSQL數據庫位於我上面寫的目錄。但是,我認爲這個問題已經解決,因爲我無法再現我所描述的行爲。看來有些東西阻止了Android關閉數據庫,我不知道它是什麼。 – qefzec
我需要在運行應用程序時使用android數據庫到phonegap數據庫。 – AndyBoy