1

我在他的电话差距领域工作。所以,我对电话差距和 Java 脚本都是新手。

我想访问同一屏幕上两个不同表中的数据。为了清楚起见,我希望 标题数据来自一个表,比如Table No-1,而正文数据来自另一个表。说表2

我应该如何使用它?

这就是我目前使用表 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);
 }    

我的疑问是我应该在哪里给 Table 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

2

回答这个问题

var db;

function initDb() {
    if(!db)
        db = window.sqlitePlugin.openDatabase("abc", "1.0", "abc", 1000000);
    console.log("db initialized");
}

function onDeviceReady() {
    console.log("processing onDeviceReady");
    initDb();

    try {
        db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM table1;", [], query1Success, query1Error);
        });
    } catch (error) {
        console.log("Error: " + error.message);
    }


}
 function query1Success(tx, results) {
        console.log("query 1 SUCCESS!");
        console.log("results rows 1: " + results.rows.length);
        runQuery2();
    }

 function query1Error (tx, err) {
        console.log("Error: " + err.message);
    }
function runQuery2() {
    try {
        db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM table2;", [], quer2ySuccess, query2Error);
        });
    } catch (error) {
        console.log("Error: " + error.message)
    }

}

function query2Success(tx, results) {
        console.log("query 1 SUCCESS!");
        console.log("results rows 1: " + results.rows.length);
        runQuery2();
    }

 function query2Error (tx, err) {
        console.log("Error: " + err.message);
    }

感谢 BendErR 和我自己。

于 2013-05-28T13:46:16.023 回答
1

看看这里

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

也许它对你有用。我认为 deviceready 应该只触发一次,当设备第一次准备好时,而不是每次。要检查这一点,请在浏览不同的 html 页面时尝试查看控制台:如果此控制台日志

console.log("processing onDeviceReady");

显示不止一次,有些东西你必须改变。如果只显示一次,那么您只初始化一次,并且在浏览时您只连接到它以获取信息。

希望能帮助到你

- - - - - - - 编辑

对不起,我错过了你的问题的重点。我的回答是这样的:

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
    }

}

我没有测试过,可能我做错了,我是用平板电脑写的,我发现这并不简单!无论如何,事情是:运行你的第一个查询,使用表一的结果,并在成功处理程序中调用一个运行第二个查询的函数。然后根据需要使用第二个表结果集。

让我知道是否清楚,希望对您有所帮助

于 2013-05-23T12:01:50.710 回答