3

電話ギャップ アプリケーション用のデータベースをセットアップしようとしています。問題は、テーブルをセットアップするトランザクション以外のすべてのトランザクションがエラーを生成することです

「SQLTransactionCallback が null であるか、例外がスローされました」

ここにコードがあります

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()]);
 }

これまたは作成テーブルのエラーメッセージが表示されません

       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());

それは大きな助けになりましたが、私の選択の1つが機能し、他の1つが思い付きました

「ステートメント コールバックで例外が発生したか、ステートメント エラー コールバックが false を返しませんでした」

これが機能していない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 が成功すると、セッション データが取得されます。セッションページが開始されると、個のデータがプルされます。しかし、ピーステーブルをプルするコードを、セッションテーブルからプルするコードに問題なく置き換えることができます。何らかの理由で、pieces テーブルに入るデータにアクセスできないようです

4

2 に答える 2

0

SELECT クエリの executeSql は非同期コマンドです。「onSelectSessionSuccess」は、テーブルから結果を受け取るコールバック関数です。

これらは非同期呼び出しであるため、クエリによってデータが返されるまで実行は待機しません。

前の呼び出しの成功コールバックの一部として、次の SELECT 呼び出しを配置し​​ます。

つまり、成功のコールバック 'onSelectSessionSuccess' でピースを選択する必要があります。そうすれば、問題なく動作します。

それが役立つことを願っています。

于 2013-09-13T08:43:30.957 に答える