数据库未存储在Android手机设备上

时间:2012-11-16 10:59:08

标签: android database cordova storage android-sqlite

我正在使用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运行的真实设备上进行测试):

  • 我使用文件资源管理器检查了文件夹/ data /但是它已折叠,我无法展开它(可能是一些系统管理员问题?!如果是这样,我怎么能成为root?)
  • 我直接在手机上查了一下,但我甚至没找到应用程序目录! (这是正常的吗?)

=>所以我不确定数据库是否已创建。

为什么我认为没有创建数据库?

事实上,每当我启动我的应用程序时,表格都是空的,尽管我早先填充了它。

我在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问题)。但是当我尝试添加另一行时,第一行不再存在。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来每次调用launchDB时都会调用setupDB,如果存在则删除表。

文件访问也可能存在一些单独的问题,但是丢弃表将是第一个要修复的问题。