2014-07-09 35 views
0

我是PhoneGap(2.9.0)的新手,我试图创建一个数据库并运行Android模拟器,但它并不好,而是给出了一些错误,如“不幸的是,该应用程序已被停止“,我不知道我的下面的代码出了什么问题。在phoneGap中创建和使用数据库不起作用

请不要认为我的问题是重复的,因为我在库存溢流中看到很多问题并试图解决问题,但是我没有得到任何解决方案。

即使包含cordova.js文件,我认为'deviceready'事件仍然无法正常工作。下面

的是我的代码片段:

<!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> 
+2

尝试插入警报声明并检查onDeviceReady()是否被触发。 'function onDeviceReady(){alert(“onDeviceReady fired!”);}'。如果在设备上看到警报,则表示它正在工作。 – frank

+0

'给出一些错误,如“不幸的是,应用程序已被停止” - - 你得到的是什么错误?这个过程何时发生?你在哪里看到错误(控制台,警报,?)?什么是您的SDK?您粘贴的代码直接来自PhoneGap文档,因此看起来没问题。 – islanddave

+0

发布logcat错误。 –

回答

0

我得到的输出为我的微小调整查询。

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> 
相关问题