当前位置: 首页 > 面试题库 >

如何从cordova-sqlite同步获取数据?

邹高懿
2023-03-14
问题内容

是否可以从cordova-sqlite同步获取数据?

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

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”中元素的数量。

举个例子…

数据库名称 案例垫 表名称 案例

    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

现在Test,Test2的条目是2和3。

现在我需要获取CaseTable的数据。而获取时,我需要计算casename表(Test,Test1)中的元素数。仅在这里

 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注意,元素数, 所以我的列表看起来像这样

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

如何在该表中打印2和3 … :(您能给我任何查询吗)


问题答案:

您可以通过执行以下操作来异步遍历它们(未经测试,但希望您能理解):

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');
    }

}

但是实际上,您不应该创建许多具有相同结构和名称的表,而是应该有一个表,其中所有数据都通过某种关系连接,然后可以使用其他答案。



 类似资料:
  • 问题内容: 美好的一天,我为Cordova制作了本机背景mod,我需要从js到Java获取数据。我使用以下代码将数据保存在带有插件cordova-plugin- nativestorage的 js中: 但是我的问题是:我不知道如何在没有Cordova活动的情况下使用Java在后台服务中获取此数据(“值”)。 背景服务Java: 问题答案: 我进行了更改,因此您应该方便地访问所保存的值。 请首先重新

  • 但我的问题是:我不知道如何在没有Cordova活动的情况下用java在后台服务中获得这些数据(“值”)。 Backgroud services Java:

  • 问题内容: 我将数据保存在SQLite数据库中。我将日期保存为DATETIME数据类型在数据库中。 我只想从我的SQLite数据库中检索特定月份的数据。 我尝试使用下面的查询来检索数据,但是它没有用。它给了我数据,但不是特定月份。 问题答案: 这可能不是最佳选择,但您可以使用:

  • 问题内容: 我正在使用当前系统时间在表中插入数据,例如 。因此,在获取数据时,我仅需要获取最后3个小时的数据。 以下链接对我没有帮助。因为此链接使用的是我没有的特定日期格式。 从SQLite获取根据过去小时的数据 这是我的查询,但似乎无法正常工作。 插入时时间戳只不过是当前系统时间。 请给我任何参考或提示。 问题答案: 您可以使用以下方法获取3小时的时间戳记 然后,您可以传递给查询。 或者您可以在

  • 我正在使用新的Paypal同步Api来获取一段时间内的所有交易。我也需要能够退款。由于我们所有的交易总是销售,我需要销售ID来退款交易,正如https://developer.paypal.com/docs/integration/direct/payments/recharnet-payments/#set-up-your-development-environment中所述,不幸的是,我在交易

  • 问题内容: 我遇到了$ .get函数的问题。网址包含JSON 我的代码: 我知道这将警告空结果,因为是 异步的 。 那么,有什么方法可以使用外部的此get函数? 问题答案: 真正的答案是 NO ,但是您可以使用以下命令: