HTML5, вопрос транзакции SQLite - PullRequest
0 голосов
/ 01 февраля 2011

В моем HTML5 у меня есть цикл for, который вызывает функцию для вставки в базу данных. Мне нужно, чтобы эта функция была внутри одной транзакции.

function Ins(id){
db.transaction(function(tx){
tx.executeSql('insert into Product(id) values(?);', [iName], function() {}, function() { });
}); 
}

Цикл для

    db.transaction(function(tx){tx.executeSql("BEGIN",[]);});
    for (intCountLine=1;intCountLine<=1000;intCountLine++)
    {
    Ins(intCount);
    }
   db.transaction(function(tx){tx.executeSql("COMMIT",[]);});

Вы можете видеть, у меня есть транзакция начала и принятия, но я предполагаю, что когда она вызывает функцию INS, она открывает новую транзакцию и закрывает ее каждый раз, когда она вызывается. Как мне убедиться, что этого не произойдет.

погуглил, но не смог найти ... пролить немного света сюда ...

1 Ответ

1 голос
/ 27 мая 2011

Может быть, это будет работать. Используйте insert select union all вместо создания 1000 операторов вставки. Но это может вставить только 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);
});

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...