如何从cordova-sqlite同步提取数据? [英] How can I fetch data synchronously from cordova-sqlite?

查看:765
本文介绍了如何从cordova-sqlite同步提取数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表格 caseTable (ID,caseName,date)。该表中的每一行对应于以caseName字段命名的另一个表。我需要循环遍历 caseTable 表,并获取所引用表中的行数。

I have a table caseTable with fields (ID, caseName, date). Each row in that table corresponds to another table named after the caseName field. I need to loop through the caseTable table and get a count of the number of rows in the table referred to.

function onDeviceReady() {
    db = window.openDatabase("Casepad", "1.0", "Casepad", 200000);
    db.transaction(getallTableData, errorCB);    
}

function insertData() {
    db.transaction(createTable, errorCB, afterSuccessTableCreation);
}

// create table and insert some record
function createTable(tx) {
    tx.executeSql('CREATE TABLE IF NOT EXISTS CaseTable (id INTEGER PRIMARY KEY AUTOINCREMENT, CaseName  TEXT unique NOT NULL ,CaseDate INTEGER ,TextArea TEXT NOT NULL)');

    tx.executeSql('INSERT OR IGNORE INTO CaseTable(CaseName,CaseDate,TextArea) VALUES ("' + $('.caseName_h').val() + '", "' + $('.caseDate_h').val() + '","' + $('.caseTextArea_h').val() + '")');


}
// function will be called when an error occurred
function errorCB(err) {
    navigator.notification.alert("Error processing SQL: " + err.code);
}

// function will be called when process succeed
function afterSuccessTableCreation() {
    console.log("success!");
    db.transaction(getallTableData, errorCB);
}


// select all from SoccerPlayer
function getallTableData(tx) {
    tx.executeSql('SELECT * FROM CaseTable', [], querySuccess, errorCB);
}


function querySuccess(tx, result) {
    var len = result.rows.length;
    var t;
    $('#folderData').empty();
    for (var i = 0; i < len; i++) {
        /* *************************************************************
         * Here i need to call a synchronous method which returns the
         * number of rows in the result.rows.item(i).CaseName table 
         * ************************************************************* */
        $('#folderData').append(
                '<li class="caseRowClick" id="' + result.rows.item(i).id + '" data-rel="popup" data-position-to="window">' + '<a href="#">' + '<img src="img/Blue-Folder.png">' + '<h2>' + result.rows.item(i).CaseName + t+'</h2>' + '<p>' + result.rows.item(i).TextArea + '</p>' + '<p>' + result.rows.item(i).CaseDate + '</p>' + '<span class="ui-li-count">' + i + '</span></a>' + 
                 '<span class="ctrl togg"><fieldset data-role="controlgroup" data-type="horizontal" data-mini="true" ><button class="edit button_design">Edit</button><button class="del button_design">Delete</button></fieldset><span>'+'</li>'
                );
    }
    $('#folderData').listview('refresh');

}

在列表视图中显示i的值的实例需要显示该表中有多少元素。我需要调用同步,因为我需要调用一些查询计数在该元素中的result.rows.item(i).CaseName中的元素数量。

Instend of showing value of "i" in list view i need to show how many element in that table . I need to call synchronise because i need to call some query which count the number of element in "result.rows.item(i).CaseName" in this element..?

Take Example ...

Take Example ...

DB名称 Case Pad
表名称CaseTable

DB Name Case Pad Table Name CaseTable

    Let assume having entries in caseTable.


      ID      CaseName      Case Date   caseNote
        1         Test           3/77/13   jgjgj
        2         Test2          4/34/3   hsadkkadsh 


Now I have two more table in DB
Test , Test2..

    **Test** having entries like this

       ID          DocumentName    Date         Notes
       1)           ppp              7/33         asdhdfkdshf
       2)           asdjhad            9/44       dfjasgfsjfj
    **Test2** having entries like this

       ID          DocumentName    Date         Notes
       1)           sad            7/4         asdhdfkdshf
       2)           assd           3/44          hhhhhh
       3)            asd           2/22          adgjad

现在测试,Test2的条目是2和3.

Now Test , Test2 have entry is 2 and 3.

现在我需要获取CaseTable的数据。我的casename表中的元素(Test,Test1)。这里只有

Now i need to fetch data of CaseTable .While fetch i need to count Number of element in my casename table (Test, Test1). here only

 function getallTableData(tx) {
        tx.executeSql('SELECT * FROM CaseTable', [], querySuccess, errorCB);
    }



    function querySuccess(tx, result) {
        var len = result.rows.length;
        var t;
        $('#folderData').empty();
        for (var i = 0; i < len; i++) {
    Here i need to call synchronize method which call the number of element in in that  result.rows.item(i).CaseName and insert it in this table
    ****************************************************************************
            $('#folderData').append(
                    '<li class="caseRowClick" id="' + result.rows.item(i).id + '" data-rel="popup" data-position-to="window">' + '<a href="#">' + '<img src="img/Blue-Folder.png">' + '<h2>' + result.rows.item(i).CaseName + t+'</h2>' + '<p>' + result.rows.item(i).TextArea + '</p>' + '<p>' + result.rows.item(i).CaseDate + '</p>' + '<span class="ui-li-count">' + i + '</span></a>' + 
                     '<span class="ctrl togg"><fieldset data-role="controlgroup" data-type="horizontal" data-mini="true" ><button class="edit button_design">Edit</button><button class="del button_design">Delete</button></fieldset><span>'+'</li>'
                    );
        }
        $('#folderData').listview('refresh');

    }

我需要打印casename casedate case注意,元素数量
所以我的列表看起来像这样

I need to Print casename casedate case Note ,number of elements So my list is look like this

 Test           3/77/13   jgjgj      2
 Test2          4/34/3   hsadkkadsh  3

如何在该表中打印2和3 ... :(您可以给我任何查询)

How to print 2 and 3 in that table...:( can you please give me any query)

推荐答案

您可以通过这样做没有测试,但希望你能得到这个想法):

You could loop through them asynchronously by doing something like this (not tested, but hopefully you get the idea):

var count = 0;
var caseTableResult = [];

var getallTableData = function (tx) {
    tx.executeSql('SELECT * FROM CaseTable', [], querySuccess, errorCB);
}

var querySuccess = function (tx, result) {
    if (count === 0) {
        caseTableResult = result;
        $('#folderData').empty();
    } else {
        var i = count - 1;
        $('#folderData').append(
                '<li class="caseRowClick" id="' + caseTableResult.rows.item(i).id + '" data-rel="popup" data-position-to="window">' + '<a href="#">' + '<img src="img/Blue-Folder.png">' + '<h2>' + caseTableResult.rows.item(i).CaseName + t+'</h2>' + '<p>' + caseTableResult.rows.item(i).TextArea + '</p>' + '<p>' + caseTableResult.rows.item(i).CaseDate + '</p>' + '<span class="ui-li-count">' + i + '</span></a>' + 
                 '<span class="ctrl togg"><fieldset data-role="controlgroup" data-type="horizontal" data-mini="true" ><button class="edit button_design">Edit</button><button class="del button_design">Delete</button></fieldset><span>'+'</li>'
        );
    }

    if (count <= caseTableResult.rows.length) {
        // Call the next query
        count += 1;
        tx.executeSql('SELECT count(*) FROM ' + caseTableResult.rows.item(i).CaseName, [], querySuccess, errorCB);
    } else {
        // We're done
        $('#folderData').listview('refresh');
    }

}

但实际上你不应该创建许多具有相同结构和不同名称的表,您应该有一个表格,其中所有数据都通过关系连接,那么您可以使用我的其他答案

But really you should not be creating lots of tables with the same structure and different names, you should have one table with all the data connected by a relationship, then you can use my other answer.

这篇关于如何从cordova-sqlite同步提取数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆