繁体   English   中英

在HTML 5 / Javascript中批量插入客户端数据库(WEB SQL)

[英]Batch insertion to client side database(WEB SQL) in HTML 5/Javascript

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

我假设你指的是WebSQL

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

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

我迟了几年,但我想用一些(额外的)建议和代码来补充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由你的真正维护:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM