我正在使用PhoneGap(Cordova 2.2.0)开发Android应用程序(Android 4.1.2)。
我正在使用Cordova Storage API:
我正在关注互联网上发现的不同示例,以便了解如何在Android上操作数据库Create Android App with SQLite using Phonegap + Jquery mobile
事实上,我的问题是我不确定数据库是否在真实设备上物理创建(我正在使用Android 2.3运行的真实设备上进行测试):
=>所以我不确定数据库是否已创建。
为什么我认为没有创建数据库?
事实上,每当我启动我的应用程序时,表格都是空的,尽管我早先填充了它。
我在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);
但它没有解决它。
我的代码很简单,我读了一个QR码,然后将它保存在一个表格中,其位置为:
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问题)。但是当我尝试添加另一行时,第一行不再存在。
感谢您的帮助。
答案 0 :(得分:0)
看起来每次调用launchDB时都会调用setupDB,如果存在则删除表。
文件访问也可能存在一些单独的问题,但是丢弃表将是第一个要修复的问题。