Android 在phoneGap中创建和使用数据库不工作

Android 在phoneGap中创建和使用数据库不工作,android,cordova,Android,Cordova,我是PhoneGap(2.9.0)的新手,我试图创建一个数据库并运行Android emulator,但它运行得并不顺利,而是出现了一些错误,如“不幸的是,应用程序已停止”,我不知道我下面的代码出了什么问题 请不要把我的问题看成是重复的问题,因为我在流动问题上看到了很多问题,试图解决这个问题,但是我没有得到任何解决办法。 我认为即使我包含cordova.js文件,“DeviceRady”事件也不能正常工作 下面是我的代码片段: <!DOCTYPE html> <html>

我是PhoneGap(2.9.0)的新手,我试图创建一个数据库并运行Android emulator,但它运行得并不顺利,而是出现了一些错误,如“不幸的是,应用程序已停止”,我不知道我下面的代码出了什么问题

请不要把我的问题看成是重复的问题,因为我在流动问题上看到了很多问题,试图解决这个问题,但是我没有得到任何解决办法。 我认为即使我包含cordova.js文件,“DeviceRady”事件也不能正常工作

下面是我的代码片段:

<!DOCTYPE html>
<html>
  <head>
    <title>Contact Example</title>

    <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for PhoneGap 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) {
        // this will be empty since no rows were inserted.
        console.log("Insert ID = " + results.insertId);
        // this will be 0 since it is a select statement
        console.log("Rows Affected = " + results.rowAffected);
        // the number of rows returned by the select statement
        console.log("Insert ID = " + results.rows.length);
    }

    // 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", "PhoneGap Demo", 200000);
        db.transaction(queryDB, errorCB);
    }

    // PhoneGap is ready
    //
    function onDeviceReady() {
        var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
        db.transaction(populateDB, errorCB, successCB);
    }

    </script>
  </head>
  <body>
    <h1>Example</h1>
    <p>Database</p>
  </body>
</html>

联系方式
//等待PhoneGap加载
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//填充数据库
//
函数填充B(tx){
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO(id unique,data));
tx.executeSql('插入演示(id,数据)值(1,“第一行”);
tx.executeSql('插入演示(id,数据)值(2,“第二行”);
}
//查询数据库
//
函数queryDB(tx){
tx.executeSql('SELECT*FROM DEMO',[],querySuccess,errorCB);
}
//查询成功回调
//
函数查询成功(发送,结果){
//由于未插入任何行,此字段将为空。
console.log(“Insert ID=“+results.insertId”);
//这将是0,因为它是select语句
console.log(“受影响的行数=“+results.rowInfected”);
//select语句返回的行数
console.log(“Insert ID=“+results.rows.length”);
}
//事务错误回调
//
函数errorCB(err){
log(“错误处理SQL:+err.code”);
}
//事务成功回调
//
函数successCB(){
var db=window.openDatabase(“数据库”,“1.0”,“PhoneGap演示”,200000);
数据库事务(查询数据库、错误数据库);
}
//PhoneGap已经准备好了
//
函数ondevicerady(){
var db=window.openDatabase(“数据库”,“1.0”,“PhoneGap演示”,200000);
db.事务(填充B、错误CB、成功CB);
}
实例
数据库


我得到了查询的输出,并做了一些小的修改

1) 我已经给出了cordova.js文件的正确格式 2) 从“successCB”功能中删除期初数据库并使其成为全局数据库

以下代码已成功执行

<!DOCTYPE html>
<html>
  <head>
    <title>Storage Example</title>
    <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

      var db;
    // Populate the database
    //
    function populateDB(tx) {
        alert('Table DEMO will be created');
        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 htmlString = '';
        var len = results.rows.length;
        alert("No of rows in the table " + len);
        // this will be true since it was a select statement and so rowsAffected was 0
        if (!results.rowsAffected) {
            console.log('No rows affected!');
            return false;
        }

        for(var i=0; i<len; i++) {
        htmlString += '<li>' + results.rows.item(i).id + '<br/>' + results.rows.item(i).data + '</li>';
        }
        $('#listview').html(htmlString);
        // for an insert statement, this property will return the ID of the last inserted row
        console.log("Last inserted row ID = " + results.insertId);
    }

    // Transaction error callback
    //
    function errorCB(err) {
        console.log("Error processing SQL: "+err.code);
    }

    // Transaction success callback
    //
    function successCB() {
        alert('successed');
        db.transaction(queryDB, errorCB);
    }

    // device APIs are available
    //
    function onDeviceReady() {
        alert("Database has been started");
        db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
        alert(db);
        db.transaction(populateDB, errorCB, successCB);
        return false;
    }
    </script>
  </head>
  <body>
    <h1>Example</h1>
    <p>Database</p>
    <ul id="listview"></ul>
  </body>
</html>  

存储示例
//等待加载设备API库
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
var-db;
//填充数据库
//
函数填充B(tx){
警报(“将创建表演示”);
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO(id unique,data));
tx.executeSql('插入演示(id,数据)值(1,“第一行”);
tx.executeSql('插入演示(id,数据)值(2,“第二行”);
}
//查询数据库
//
函数queryDB(tx){
tx.executeSql('SELECT*FROM DEMO',[],querySuccess,errorCB);
}
//查询成功回调
//
函数查询成功(发送,结果){
var htmlString='';
var len=results.rows.length;
警报(“表中的行数”+len);
//这将是真的,因为它是select语句,所以rowsAffected为0
如果(!results.rowsAffected){
log('没有受影响的行!');
返回false;
}

对于(var i=0;iTry),插入警报语句并检查OnDevicerady()是否被触发。
函数OnDevicerady(){alert(“OnDevicerady fired!”);}
。如果在设备上看到警报,则表示它正在工作。
给出一些错误,如“不幸的是,应用程序已停止”
--您得到的确切错误是什么?过程中什么时候发生这种情况?您在哪里看到错误(控制台、警报?)?您的SDK是什么?您粘贴的代码直接来自PhoneGap文档,因此看起来没有问题。发布logcat错误。