4

是否可以在 HTML 5 的客户端数据库中使用批处理操作?

4

2 回答 2

6

我假设您指的是WebSQL

此时,WebSQL 基本上是包装器中的 SQLite。SQLite不支持INSERT在一个语句中插入多行。但是您可以使用占位符进行一次查询并在单个事务中执行多次,以提高性能并确保完整性。

如果这不能回答您的问题,您应该澄清您遇到的确切问题。

于 2012-04-15T13:18:52.473 回答
0

我迟到了几年,但我想用一些(额外的)建议和代码来补充 DCoder 的答案!

首先,如果您正在阅读本文,您可能不应该使用 WebSQL。它已被弃用,取而代之的是 IndexedDB,此时它是 W3C 标准轨道上的唯一数据库。

如果出于某种原因,您打算继续使用 WebSQL,您可能会意识到其默认 API 的异步性意味着多语句事务代码很可能变得复杂且笨拙。

如果您想省去编写此类代码的麻烦,请查看BakedGoods 。例如,使用该库,将一个或多个项目插入到表中非常简单:

bakedGoodsd.set({
    data: [{key: "key1", value: "value1"}, {key: "key2", value: "value2"}]
    storageTypes: ["webSQL"],
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

...这比使用原始 API 必须编写的内容要简洁得多:

function insertData(transaction)
{
    var dataInsertStatement = "INSERT INTO Main(key, value) VALUES (?, ?)";
    var dataArray = [{key: "key1", value: "value1"}, {key: "key2", value: "value2"}];

    int i = 0;

    function advance()
    {
        if(++i < dataArray.length)
            insertDataItem();
    }

    function insertDataItem()
    {
        transaction.executeSql(
            dataInsertStatement, 
            [dataArray[i].key, dataArray[i].value], 
            advance
        );
    }

    insertDataItem();
}


function conductDataInsertTransac(database)
{
    database.transaction(insertData);
}

window.openDatabase("Baked_Goods", "", "Baked Goods", 1024*1024, conductDataInsertTransac);

BakedGoods 的简单界面和无与伦比的存储设施支持是以缺乏对某些存储设施特定配置的支持为代价的。例如,它不支持在具有多列主键的 WebSQL 表中进行存储操作。

因此,如果您大量使用这些类型的功能,您可能想看看其他地方。

哦,为了完全透明,BakedGoods 由您真正维护 :) 。

于 2016-07-12T01:07:18.903 回答