2011-02-01 2 views
0

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

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

Может быть, это будет работа. Используйте 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); 
}); 

}

Смежные вопросы