在使用HTML5将1000条记录插入sqlite时,如何加快进程

在使用HTML5将1000条记录插入sqlite时,如何加快进程,sqlite,html,Sqlite,Html,我是开发HTML5应用程序的新手。在本文中,我想使用HTML5将1000条记录插入sqlite数据库。这个过程非常缓慢。如何在插入记录之前使用“开始/提交”。这样可以加快插入速度。任何人请引导我。提前谢谢。请在chrome浏览器中运行此示例。 以下代码供您参考: <!DOCTYPE HTML> <html> <head> <script type="text/javascript"> var db = openDatabase('mydb', '1

我是开发HTML5应用程序的新手。在本文中,我想使用HTML5将1000条记录插入sqlite数据库。这个过程非常缓慢。如何在插入记录之前使用“开始/提交”。这样可以加快插入速度。任何人请引导我。提前谢谢。请在chrome浏览器中运行此示例。 以下代码供您参考:

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var msg;
//db.transaction(function(tx){tx.executeSql("BEGIN",[]);});
for(var i=0;i<1000;i++)
{
    txquer(i,"test");
}
//db.transaction(function(tx){tx.executeSql("COMMIT",[]);});
db.transaction(function (tx) {
  tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
   var len = results.rows.length, i;
   msg = "<p>Found rows: " + len + "</p>";
   document.querySelector('#status').innerHTML +=  msg;  
 }, null);
});
function txquer(i,test)
{ 
    db.transaction(
    function(tx){
      tx.executeSql('INSERT INTO LOGS (id, log) VALUES (?, ?)',[i,test]);    
    }
    );
} 
</script>
</head>
<body>
<div id="status" name="status">Status Message</div>
</body>
</html>
问候,,
Neeraja。

您开始了1000笔交易。提交事务的速度很慢,因为它与硬盘驱动器速度有关。请参见

您已经有了在单个事务中插入1000个插入的代码。由于某种原因,它被注释掉了。删除评论,您就完成了

db.transaction(function(tx){tx.executeSql("BEGIN",[]);});
for(var i=0;i<1000;i++)
{
    txquer(i,"test");
}
db.transaction(function(tx){tx.executeSql("COMMIT",[]);});

这个问题是,您正在为每个步骤使用一个单独的事务,而不是重用它,因此它运行得很差

db.transaction是一个事务,因此不需要开始/提交

试试这个:

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var msg;
db.transaction(function (tx) {
    for(var i=0;i<1000;i++)
    {
        txquer(tx, i,"test");
    }
});
db.transaction(function (tx) {
  tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
   var len = results.rows.length, i;
   msg = "<p>Found rows: " + len + "</p>";
   document.querySelector('#status').innerHTML +=  msg;  
 }, null);
});
function txquer(tx,i,test)
{ 
    tx.executeSql('INSERT INTO LOGS (id, log) VALUES (?, ?)',[i,test]);    
} 
</script>
</head>
<body>
<div id="status" name="status">Status Message</div>
</body>
</html>

我解决了它,也许这有用。使用“insert select union all”而不是创建1000条insert语句。但一次只能插入500行。这是我编写的代码,在google chrome上做一个测试,我确信它能工作

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

状态消息

我实际上编写了一个名为的小型开源javascript模块,它解决了这个问题。好消息是html5sql.js速度非常快。在我的网站上有一个演示,它创建了一个表,并在该表中插入11000条记录,通常不到一两秒钟。如果有人仍在处理这个问题,我建议您签出html5sql.js。

速度有多慢?什么浏览器?有代码示例要看吗?可能与SQLite无关,但我相信这是可能的。您是否真的在执行查询以将日志表中的记录计数为每个日志插入的一部分?这将大大降低您的速度。将所有插入内容放入同一事务中。这就是全部!我不明白你的意思。请修改上面的代码并将其发送给我。我尝试了在桌面环境下工作出色的模块。但将其集成为android应用程序则是另一回事。关于这方面的支持/演示/教程如何?我无法使此解决方案工作。只是我吗?我找到了另一个解决方案