2012-07-07 4 views
2

sqlite를 사용하여 일부 테이블이있는 DB를 채 웁니다. 데이터베이스를 실행하는 다른 javascript 페이지에서 함수를 만들었습니다. &은 테이블에서 일부 값을 선택합니다. 이 함수는 $ (document) .ready()에서 호출됩니다.쿼리를 사용하여 Sqlite DB에서 값을 가져올 수 없습니다.

자바 스크립트 :

//DB Population 
function onDeviceReady() { 
    var db = window.openDatabase("Database", "1.0", "SqliteTrial", 20000); 
    db.transaction(populateDB, errorCB, successCB); 
} 

function populateDB(tx) { 
tx.executeSql('DROP TABLE IF EXISTS Subjects'); 
tx.executeSql('CREATE TABLE IF NOT EXISTS Subjects (id unique, subjectname)'); 
tx.executeSql('INSERT INTO Subjects (id, subjectname) VALUES (1, "Math")'); 
tx.executeSql('INSERT INTO Subjects (id, subjectname) VALUES (2, "Science")'); 
} 

function GetSubjectsFromDB() 
{ 
    console.log(""); 
    tx.executeSql('SELECT * FROM Subjects', [], queryNSuccess, errorCB); 
} 

function queryNSuccess(tx, results) { 
    alert("Query Success"); 
    console.log("Returned rows = " + results.rows.length); 
    if (!results.rowsAffected) { 
     console.log('No rows affected!'); 
     return false; 
    } 
    console.log("Last inserted row ID = " + results.insertId); 
} 

function errorCB(err) { 
    alert("Error processing SQL: "+err.code); 
} 

이 줄 어떤 문제가 있습니까?

tx.executeSql('SELECT * FROM Subjects', [], queryNSuccess, errorCB); 

queryNSuccess가 호출되지 않고 둘 다 errorCB가 아니므로 잘못된 것이 무엇인지 알 수 없습니다.

이것은 내가 다른 페이지를 호출하는 방법입니다

자바 스크립트 :

 $(document).ready(function() { 
      DisplayData(); 
      GetSubjectsFromDB(tx); 
     }); 
+0

"tx"는 어떻게 초기화됩니까? 콘솔에 오류가보고 되었습니까? – Pointy

+0

나는 tx 코드를 넣었다. 콘솔에 오류가 없습니다. –

+0

"tx"가 설정된 코드가 표시되지 않습니다. – Pointy

답변

1

이 아니, 그런 식으로 작동하지 않습니다. tx 변수는 실제로 db.transaction 메서드에 의해 지정된 콜백 함수로 전송되는 매개 변수입니다.

$(document).ready(function() { 
    ... 
    db.transaction(GetSubjectsFromDB);    
}); 

을 ... 그리고이 함수 정의를 다시 ...

function GetSubjectsFromDB(tx) { ... something to do with tx ... } 

을하지만, 내가보기로 또 다른 문제는, 실제로있다 : 그래서 당신은 아마 대신이 작업을 수행 할 수 있습니다. 연결 핸들 (window.openDatabase 호출로 생성 됨)을 저장하는 db 변수는 onDeviceReady 함수에 로컬로 적용됩니다. 즉,이 함수 외부에서는 보이지 않습니다.

이 문제를 해결하는 가장 쉬운 방법은 글로벌 컨텍스트에서이 변수를 정의하는 것입니다 :

var dbh; // the SQLite connection handle 
function onDeviceReady() { ... dbh = window.openDatabase ... } 
function GetSubjects() { ... dbh.transaction(getSubjectsFromDb) ... } 
function getSubjectsFromDb(tx) { ... tx.executeSql(...) ... } 

여기 WebSQL DB의 일반적인 사용을 설명하는 좋은 presentation입니다. 그러나 WebSQL DB API가 더 이상 사용되지 않는 것으로 간주한다고 덧붙이고 싶습니다. 대신 IndexedDB를 사용하는 것이 좋습니다. 그것에 대해 읽어 보려면 something가 있습니다.

+0

고맙습니다. @ raina77ow ... 답변은 정말 유용합니다. –

관련 문제