我正在使用 PhoneGap (Cordova 2.2.0) 开发一个 Android 应用程序 (Android 4.1.2)。
我正在使用Cordova 存储 API:
我正在关注互联网上的不同示例,以了解如何在 Android 上操作数据库,例如使用 Phonegap + Jquery mobile 使用 SQLite 创建 Android 应用程序
事实上,我的问题是我不确定数据库是否是在真实设备上物理创建的(我正在运行 Android 2.3 的真实设备上进行测试):
- 我使用文件资源管理器签入文件夹 /data/ 但它已折叠并且无法展开(可能是一些系统管理员问题?!如果是这种情况,我怎样才能成为 root?)
- 我直接在手机上查了下,竟然连Application目录都没有找到!(正常吗?)
=> 所以我不确定是否创建了数据库。
为什么我认为没有创建数据库?
事实上,每次我启动我的应用程序时,表都是空的,尽管我之前已经填充了它。
我在 LogCat 中也有这个错误:
sqlite returned error code = 14 msg = cannot open file at source line 25467
我做了一些研究,发现 onCreate 函数中的这段代码可以解决这个问题:
WebSettings settings = super.appView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
String databasePath = this.getApplicationContext().getDir("database",
Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(databasePath);
但它并没有解决它。
我的代码很简单,我阅读了一个二维码并将其保存在一个表格中,其中包含以下位置:
var scanCode = function() {
window.plugins.barcodeScanner.scan(
function(result) {
alert("Scanned Code: " + result.text
+ ". Format: " + result.format
+ ". Cancelled: " + result.cancelled);
getPosition(result.text);
}, function(error) {
alert("Scan failed: " + error);
});
}
function getPosition(data) {
navigator.geolocation.getCurrentPosition(
function(position, result){
launchDB();
latitude = position.coords.latitude;
longitude = position.coords.longitude;
db.transaction(function(tx) {
tx.executeSql("insert into DEMO(code,updated, latitude, longitude) values(?,?,?,?)",[data, new Date(),latitude, longitude]);
},errorCB,successInsert);
}, positionError);
}
function launchDB() {
console.log("launchDB()");
db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(setupDB, errorCB);
}
function setupDB(tx) {
console.log("setupDB()");
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql("CREATE TABLE IF NOT EXISTS DEMO(id INTEGER PRIMARY KEY,code,updated, latitude, longitude)");
}
function errorCB(err) {
console.log("Error processing SQL: "+err.code);
}
function successInsert() {
console.log("successInsert()");
}
我尝试在另一个页面中显示行:
function showCode() {
console.log("showCode()");
db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(parseDB, errorCB);
}
function parseDB(tx) {
console.log("parseDB()");
tx.executeSql('SELECT * FROM DEMO', [], writeEntries, errorCB);
}
function writeEntries(tx, results) {
console.log("writeEntries()");
var len = results.rows.length;
document.write("DEMO table: " + len + " rows found.");
console.log("DEMO table: " + len + " rows found.");
for (var i=0; i<len; i++){
document.write("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i).code + " Latitude = " + results.rows.item(i).latitude+ " Longitude = " + results.rows.item(i).longitude );
console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i).code + " Latitude = " + results.rows.item(i).latitude+ " Longitude = " + results.rows.item(i).longitude);
}
}
在日志中,我可以看到创建的行。但在 html 页面中没有(但这是另一个问题:JQuery 问题)。但是当我尝试添加另一行时,第一行不再存在。
谢谢您的帮助。