2011-02-01 17 views
0

私のHTML5では、私はデータベースに挿入する関数を呼び出すforループを持っています。私はこの機能を単一のトランザクションの中に入れる必要があります。あなたが見ることができるループHTML5、SQLiteトランザクションの質問

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

ため

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

、私はトランザクションが&コミット始めていますが、私はそれはINS関数を呼び出したときに、それを新しいトランザクションを開閉なり、毎回を想定しますいわゆる。それが起こらないことをどうやって確認するのですか?

答えて

1

この意志作品かもしれませ....ここにいくつかの光、私を投げる...それをグーグルが、それを見つけることができませんでした。 1000の挿入ステートメントを作成する代わりにinsert select union allを使用してください。しかしこれは、一度に500行しか挿入できません。ここで私が取り組んだコードは、私はそれが動作すると確信しているGoogleのクロムでテストを行います。

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

}

関連する問題