1

私はPhone Gapドメインで働いています。そのため、Phone GapとJava Scriptの両方が初めてです。

同じ画面で 2 つの異なるテーブルのデータにアクセスしたいと考えています。明確にするために、 ヘッダー データを 1 つのテーブル(Table No-1など) から取得し、本文データを別のテーブルから取得する必要があります。Table No-2と言います。

どのように使用すればよいですか?

これが、私が現在テーブル No-1 を使用している方法です。

 function onDeviceReady() 
 {    
    console.log("processing onDeviceReady!!! onDeviceReady");   
    var db =  window.sqlitePlugin.openDatabase("abc", "1.0", "abc", 1000000); 
    console.log("processing onDeviceReady");
    db.transaction(queryDB, errorCB);
 }

 function queryDB(tx,paramName) 
 {
    tx.executeSql("SELECT * FROM Table No-1 , [], querySuccess, errorCB);
 }    

私の疑問は、表 No-2 をどこに与えるべきかということです。

編集バージョン--->これは私が実装しようとしたハードウェアです:

function onDeviceReady(paramName) 
{     
    console.log("processing Causeee!!! onDeviceReady"); 
var db =  window.sqlitePlugin.openDatabase("abc", "1.0", "abc", 1000000); 
    console.log("processing onDeviceReady");
var searchString = window.location.search.substring(1),i, val, params = searchString.split("&");
for (i=0;i<params.length;i++) 
{
    val = params[i].split("=");
    if (val[0] == paramName) 
    {
    return unescape(val[1]);
    }
        value=val[1];
    console.log("valueeesss: "+val[1]);
    cid_value=parseInt(value)+parseInt(1);
    db.transaction(queryDB, cid_value,value);
}
}

function queryDB(tx, results,paramName) 
{
tx.executeSql("SELECT cid,value FROM table1 where cid="+cid_value, [], errorCB,cid_value,value);
    console.log("processing queryDB");
    var mySwiper = new Swiper('.swiper-container', { 
speed:20,mode:'horizontal'})
var details = results.rows.length;
    for (var i=0; i < details ; i++)
{
    cidinstance=results.rows.item(i).cid;
    var valueinstance=results.rows.item(i).value;
    console.log("cid = "+cidinstance + " | valueinstance = "+valueinstance);
    var val = i;
    var superdiv = document.getElementById('swiper-wrapper');
    var newdiv =  mySwiper.createSlide('div');
    newdiv.append();
    var divIdName = 'swiper-slide'+val;
    newdiv.setAttribute('id',divIdName);
    newdiv.className="swiper-slide";
    superdiv.appendChild(newdiv);
    var cnt = '<div id="container'+val+'" class="container_cause" style="background:url(img/cause_value_bg.png) no-repeat scroll 0 0 transparent; "><div id="cause'+val+'" class="clinical_slide"><span ><h5>'+results.rows.item(i).value+'</h5></span></div></div><div class="pagination1"></div>';
        console.log("check value"+cnt);
    document.getElementById(divIdName).innerHTML=cnt;
    console.log("processsing parameter loop ");
}
    ----
 }
4

2 に答える 2

1

ここを見てください

http://www.raymondcamden.com/index.cfm/2012/4/3/Adding-database-synchronization-to-your-PhoneGap-project

多分それはあなたにとって役に立ちます。deviceready は、毎回ではなく、デバイスの準備が初めて整ったときに 1 回だけ起動する必要があると思います。それを確認するには、異なる html ページをブラウズしながらコンソールを見てみてください: もしこのコンソールログが

console.log("processing onDeviceReady");

が複数回表示されている場合は、変更する必要があります。が 1 回だけ表示される場合は、それを 1 回だけ初期化していることになり、ブラウズ中は情報を取得するためだけに接続します。

それが役に立てば幸い

- - - - - - - 編集

申し訳ありませんが、私の答えであなたの質問の要点を逃しました..次のようなことを試してください:

function getHeader(){
    db.transaction(function(tx){
        tx.executeSql("select * from table1",[],success,failure);
    }};
    this.success = function(tx, results){
       for(var x=0; x<results.rows.lenght; x++){
           //use resultset from table 1 as you need
       }
       getBody();
    };
    this.failure = function(tx, error){
        //handle error here
    }

}
function getBody(){
    db.transaction(function(tx){
        tx.executeSql("select * from table2",[],success,failure);
    }};
    this.success = function(tx, results){
       for(var x=0; x<results.rows.lenght; x++){
           //use resultset from table 2 as you need
       }
    };
    this.failure = function(tx, error){
        //handle error here
    }

}

私はそれをテストしていません。おそらく私は間違いを犯しました。私はタブレットから書いていますが、それほど単純ではないことがわかりました! とにかく、最初の query を実行し、テーブル番号 1 の結果を使用し、success ハンドラで 2 番目のクエリを実行する関数を呼び出します。次に、必要に応じて 2 番目のテーブルの結果セットを使用します。

それが明確かどうか教えてください、それが役立つことを願っています

于 2013-05-23T12:01:50.710 に答える