0

私のアプリケーションでは、テーブルに値を挿入したいと思います。index.htmlファイルのonDeviceReady()メソッドでデータベースを作成しました。

     <!DOCTYPE html>
<!-- Auto Generated with Sencha Architect -->
<!-- Modifications to this file will be overwritten. -->
<html>
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Teritree</title>
<script type="text/javascript" id="phonegap" src=
"cordova-2.0.0.js">
</script>

<script type="text/javascript" src="barcodescanner.js">
</script>

<script src="sencha-touch-all.js" type="text/javascript">
</script>

<link rel="stylesheet" type="text/css" href="app.css">
<script type="text/javascript" src="app/Ext.ux.touch.Rating.js">
</script>

<script type="text/javascript" src="app/app.js">
</script>

<script type="text/javascript">
        Ext.Loader.setConfig({ disableCaching: false });
        Ext.Ajax.setDisableCaching(false);    

</script>

<script type="text/javascript" charset="utf-8">

    var pictureSource;   // picture source
    var destinationType; // sets the format of returned value 
    var mydb;

    // Wait for PhoneGap to connect with the device
    function onLoad() {
        document.addEventListener("deviceready",onDeviceReady,false);
    }

    // PhoneGap is ready to be used!

    function onDeviceReady() {
        console.log("it is in ondevice ready method..");
        mydb = window.openDatabase("teritreeDb", "1.0", "TestDB", 10000);
        console.log("it is in ondevice ready method..1");
        mydb.transaction(populateDB, errorCB, successCB);
        console.log("it is in ondevice ready method..2");
   }

   function populateDB(tx) {
   console.log("it is in populateDB----------1");
     tx.executeSql('DROP TABLE IF EXISTS DEMO', function () {
         tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)', function () {
             console.log("Table created");
         });
     });

      // Transaction error callback
    //
    function errorCB(tx, err) {
        alert("Error processing SQL: "+err);
    }

    // Transaction success callback
    //
    function successCB() {
        alert("success!");
    }
}

</script>

<script type="text/javascript">
        if (!Ext.browser.is.WebKit) {
            alert("The current browser is unsupported.\n\nSupported browsers:\n" +
                "Google Chrome\n" +
                "Apple Safari\n" +
                "Mobile Safari (iOS)\n" +
                "Android Browser\n" +
                "BlackBerry Browser"
            );
        }

</script>
</head>
<body>
</body>
</html>

これで、サインアップ画面が1つあり、サインアップ画面に送信ボタンがあります。したがって、送信ボタンをクリックすると、すべての詳細がデータベースに保存され、DEMOテーブルに保存されます。コントローラーでは、ボタンイベントを記述しています。

     onSubmitButtonTap : function(button, e, options) {

        mydb = window.openDatabase("appDb", "1.0", "Test DB", 1000000);
        mydb.transaction(storeCustomerDetails, error, success);


    function storeCustomerDetails(tx)
    {
        tx.executeSql('insert into DEMO (id,data) values("1","Hello")');
        tx.executeSql('insert into DEMO (id,data) values("2","Hello World")');
    }

    function error(){
        alert("data is not inserted");
    }
    function success(){
        alert("data is succesfully inserted");
    }
},

しかし、それは私に警告を与えています、データは挿入されません。リンクをたどった:Phonegap DB Link

助けてください..

4

2 に答える 2

1

Arindam、デフォルトではSQLの実行が非同期であることを忘れないでください。したがって、関数populateDB(tx)で定義した順序で、sqlが実行されることを保証する人は誰もいません。例えば。削除よりも最初に作成を実行できます...

確実に順番に、コールバック関数で後続の呼び出しを定義する必要があります

function populateDB(tx) {
     tx.executeSql('DROP TABLE IF EXISTS DEMO', function () {
         tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)', function () {
             console.log("Table created");
         });
     });
}

乾杯、オレグ

于 2012-07-28T14:15:39.433 に答える
1

Cordova 2.0.0を使用すると、問題が解決します。ファイルエクスプローラーで作成したデータベースを確認できます。それがあなたを助けるかどうか私に知らせてください。

于 2012-07-30T05:29:30.880 に答える