2014-07-09 3 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 해고!");}'. 장치에 경고가 표시되면 작동 중임을 의미합니다. – 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> 
관련 문제