2011-02-01 2 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() { }); 
}); 
} 

제 1, 내가 트랜잭션이 & 커밋 시작,하지만 나는 그것이 INS 함수를 호출 할 때, 그것을 새 트랜잭션을 열고 닫을 것, 매번 가정 그것은이라고. 어떻게 그런 일이 일어나지 않는지 어떻게 확인합니까?

봤어. 찾지 못했습니다. 빛을 좀 여기에 던져주세요. ...

답변

1

이 작품이 될 수 있습니다. 1000 삽입 문을 만드는 대신 insert select union all을 사용하십시오. 하지만 이렇게하면 한 번에 500 행만 삽입 할 수 있습니다. 여기에 내가 일한 코드가있다, 구글 크롬에 대한 테스트를 해본 다.

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

}