Я разрабатываю приложение 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.
Мой вопрос: почему изменения никогда не записываются в файл постоянной базы данных? Кажется, что не существует способа закрыть соединение с телефонной связью, и даже убить приложение вручную не записывает изменения в файл .db. Я не уверен, что я сделал не так.
Кто-нибудь видит проблему здесь?