2013-09-12 4 views
3

Я пытаюсь создать базу данных для моего приложения для разрыва в телефоне. проблема все операции кроме тех Настройки таблицы выводится сообщение об ошибке, говоряОшибка базы данных Phonegap

«SQLTransactionCallback был нулевым или выбросил исключение»

здесь код

function Datasetup() 
{ 
    db=window.openDatabase("PracticeData","1.0","saveData",300000); 
    alert("1"); 
    db.transaction(getDB,onDBError,onDBSuccess); 
} 
function onDBError(error) 
{ 
    alert("Database Error"+error.message); 
} 

function onDBSuccess(tx,results) 
{ 
    alert("successfull"); 
} 

function getDB(tx) 
{ 
    alert("2"); 
    tx.executeSql("CREATE TABLE IF NOT EXISTS session(date,length,activity,pieces)"); 
    alert("3"); 
    tx.executeSql("CREATE TABLE IF NOT EXISTS       pieces(newpiece,name,composer,youtube,images_src,date_Added)"); 
    alert("4"); 
    tx.executeSql('SELECT * FROM session', [], onSelectSessionSuccess, onDBError()); 
    tx.executeSql("SELECT * FROM session",[],onSelectSessionSuccess,onDBError()); 
    alert("5"); 
    tx.executeSql("SELECT * FROM pieces",[],onSelectPiecesSuccess,onDBError()); 
} 

function savepiece(tx) 
{ 
    tx.executeSql("INSERT INTO   NOTES(newpiece,name,composer,youtube,images_src,date_Added)VALUES(?,?,?,?,?,?)",[true,pieceData.name,pieceData.composer,"tube","images",date()]); 
} 

Я не» т получить meseges ошибки для этого или создать таблицу

 db.transaction(getDB,onDBError,onDBSuccess) 

Я получаю сообщение об ошибке для

 tx.executeSql('SELECT * FROM session', [], onSelectSessionSuccess, onDBError()); 

     tx.executeSql("SELECT * FROM session",[],onSelectSessionSuccess,onDBError()); 
     alert("5"); 
     tx.executeSql("SELECT * FROM pieces",[],onSelectPiecesSuccess,onDBError()); 

был большую помощь в настоящее время один из моих выбирает работу другой, однако приходит с

«оператор обратного вызова поднял исключение или ошибка оператор обратного вызова не возвращают ложные»

здесь SQL, который не работает

 tx.executeSql('SELECT * FROM session', [],onSelectPiecesSuccess, onDBError); 

здесь обновленный код

function Datasetup(){ 

db=window.openDatabase("PracticeData","1.0","PracticeData",300000); 
db.transaction(getDB,onDBError,onDBSuccess); 
    } 

    function onDBError(error){ 
alert("Database Error "+error.message); 
    } 
      function onDBSuccess(tx,results){ 
     //db.transaction(query,onDBError); 
db.transaction(query,onDBError); 
     alert("before"); 

    } 


    function getDB(tx){ 
//alert("dropping") 
//tx.executeSql("DROP TABLE pieces"); 

tx.executeSql("CREATE TABLE IF NOT EXISTS session(date,length,activity,pieces)"); 
tx.executeSql("CREATE TABLE IF NOT EXISTS pieces(newpiece,name,composer,youtube,images_src,date_added)"); 
//tx.executeSql('INSERT INTO session(date, length, activity,pieces) VALUES ("10-2-12", "15","2","11")'); 
//tx.executeSql('INSERT INTO session (date, length, activity,pieces) VALUES ("11-2-12", "15","2","11")'); 
//tx.executeSql('INSERT INTO session (date, length, activity,pieces) VALUES ("12-2-12", "15","2","11")');*/ 
tx.executeSql('INSERT INTO session (date, length, activity,pieces) VALUES ("13-2-12", "15","2","violin")'); 
tx.executeSql('INSERT INTO pieces (newpiece, name, youtube,images_src,date_Added) VALUES ("true", "15","tube","11",13-9-13)'); 
//tx.executeSql("DROP TABLE pieces"); 
//tx.executeSql("DROP TABLE session"); 
//alert("vi"); 
    } 
      /**sessions**/ 
      function query(tx){ 
tx.executeSql('SELECT * FROM session', [], onSelectSessionSuccess, onDBError); 
    } 
    function onSelectSessionSuccess(tx,results){ 
dbResult = results; 
var len= results.rows.length; 
var sessionList=""; 

for(var i=0;i<len;i++) 
{ 
    sessionList = sessionList+"<li>"+results.rows.item(i).date+"</li>" 
} 
alert(sessionList); 
//tx.executeSql("SELECT * FROM pieces",[],onSelectPiecesSuccess,onDBError()); 
db.transaction(piecesquery,onDBError); 
    } 

    /**pieces**/ 
      function piecesquery(tx){ 
//alert("piecesquery"); 
tx.executeSql('SELECT * FROM session', [],onSelectPiecesSuccess, onDBError); 
    } 
    function onSelectPiecesSuccess(tx,results){ 
var len= results.rows.length; 
var PiecesList=""; 
var newPiecesList=""; 
var res; 
alert(len); 
for(var i=0;i<len;i++) 
{ 
    newPiecesList=newPiecesList+"<li>"+results.rows.item(i).newpiece + results.rows.item(i).composer +"</li>" 
} 
alert(newPiecesList); 
$('#newPiecesList').innerHTML(newPiecesList); 

    } 

мой поток: таблицы созданы и заполнены getDB. Данные сеанса выводятся на успех getDb. данные деталей вытягиваются при инициировании сеансовой страницы. Но я могу заменить код, чтобы вытащить таблицу разделов с кодом, чтобы вытащить из таблицы сеанса без проблем. почему-то кажется, что данные, поступающие в таблицу кусков, недоступны

ответ

0

executeSql для запроса SELECT - это асинхронная команда. «OnSelectSessionSuccess» - это функция обратного вызова, в которой вы получите результат из таблицы.

Поскольку это асинхронные вызовы, выполнение не будет ждать, пока данные будут возвращены запросом.

Поместите следующий вызов SELECT как часть обратного вызова успешного вызова предыдущего вызова.

i.e вы должны выбрать части в обратном вызове успеха onSelectSessionSuccess, и все будет работать абсолютно нормально.

Надеюсь, что это поможет.

+0

был большую помощь в настоящее время один из моих выбирает работу другой, однако приходит с «оператор обратного вызова поднял исключение или ошибка оператор обратного вызова не возвращают ложные» –

+0

вы на самом деле выбора дважды из таблицы сессий ? Что такое ваш поток? – SHANK

+0

В строке db.transaction (piecesquery, onDBError); из функции onSelectSessionSuccess вы используете объект db для начала транзакции, но ваш db там не отображается. Вместо этого используйте метод, который вы прокомментировали в предыдущей строке, где вы расширяете транзакцию и выполняете оператор select как executeSql. надеюсь, это поможет – SHANK

1

Я сделал создание таблицы, вставляю и выбираю процесс. Надеюсь, это будет полезно.

var db=null; 
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 

    db = window.openDatabase("TestDatabase","1.0","TestingDatabase",'200000000'); 

    alert("db1"); 
    db.transaction(populateDatabase,errorDb,successDb); 


} 
function populateDatabase(tx){ 

    tx.executeSql('DROP TABLE IF EXISTS TestTable'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS TestTable(RollNo INT PRIMARY KEY,FirstName text,LastName text,MobileNo text)'); 

    tx.executeSql('INSERT INTO TESTTABLE (RollNo, FirstName, LastName, MobileNo) VALUES (1, "Nisari", "Balakrishnan", "8891924207")'); 
    tx.executeSql('INSERT INTO TESTTABLE (RollNo, FirstName, LastName, MobileNo) VALUES (2, "Mikhil", "Anandan", "1")'); 

} 
function queryDB(tx) { 
    tx.executeSql('SELECT * FROM TESTTABLE', [], querySuccess, errorCB); 
} 
function querySuccess(tx, results) { 
    var len = results.rows.length; 
    alert(len); 
    console.log("DEMO table: " + len + " rows found."); 
    for (var i=0; i<len; i++){ 
     //console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i).data); 
     alert("Row = " + i + " ID = " + results.rows.item(i).RollNo + " FirstName = " + results.rows.item(i).FirstName + " LastName = " + results.rows.item(i).LastName + " MobileNo = " + results.rows.item(i).MobileNo); 

//   db = window.openDatabase("TestDatabase","1.0","TestingDatabase",'200000000'); 
//   db.transaction(updateDB, errorCB); 
//   console.log("After Open DB"); 


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



function errorDb() 
{ 
    alert("Error on Database creation:" + Error); 
} 
function successDb() 
{ 
    alert("Database is created successfully"); 
      db = window.openDatabase("TestDatabase","1.0","TestingDatabase",'200000000'); 
    db.transaction(queryDB, errorCB); 
} 
Смежные вопросы