首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML5,SQLite事务问题

HTML5,SQLite事务问题
EN

Stack Overflow用户
提问于 2011-02-02 01:04:34
回答 1查看 3.1K关注 0票数 0

在我的HTML5中,我有一个for循环,它调用一个函数来插入到数据库中。我需要这个函数在单个事务中。

代码语言:javascript
复制
function Ins(id){
db.transaction(function(tx){
tx.executeSql('insert into Product(id) values(?);', [iName], function() {}, function() { });
}); 
}

for循环

代码语言:javascript
复制
    db.transaction(function(tx){tx.executeSql("BEGIN",[]);});
    for (intCountLine=1;intCountLine<=1000;intCountLine++)
    {
    Ins(intCount);
    }
   db.transaction(function(tx){tx.executeSql("COMMIT",[]);});

您可以看到,我让事务开始并提交,但我假设当它调用INS函数时,它会在每次调用时打开一个新的事务并关闭它。我怎样才能确保这种情况不会发生。

我用谷歌搜索了一下,但是找不到...给我点光……

EN

回答 1

Stack Overflow用户

发布于 2011-05-27 15:09:12

也许这将会起作用。使用insert select union all而不是创建1000条insert语句。但是这样一次只能插入500行。这是我写的代码,在Google chrome上做个测试,我确信它可以工作。

代码语言:javascript
复制
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var msg;
var j=1;
var i=1;
var quer="";
db.transaction(function(tx){tx.executeSql("CREATE TABLE IF NOT EXISTS LOGS (ID INTEGER PRIMARY KEY ASC, todo TEXT)",[]);});
db.transaction(function(tx){tx.executeSql("delete from logs",[]);});
txquer();
showMsg();
function txquer()
{
  quer="insert into logs ";
 for(i=j;i<=j+498;i++)
 {
  quer+=" select "+i+",'test' union all";
  }
  quer+=" select "+i+",'test' ; ";
  j=i+1;
    db.transaction(
    function(tx){
      tx.executeSql(quer,[]);    
    }
    );

}

function showMsg(){
db.transaction(function (tx) {
  tx.executeSql('SELECT count(*) todo FROM LOGS', [], function (tx, results) {
   var len = results.rows.item(0).todo;
   msg = "<p>Found rows: " + len + "</p>";
   document.querySelector('#status').innerHTML +=  msg;  
 }, null);
});

}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4865591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档