MONACAでアプリ開発を行っています。
使用しているのはJavaScript, SQLite, AngularJSです。
現在CSVを読んで、DBに書き込むことを行っていて、
それ自体は出来ているのですが、その際、読み込ませるデータの一つが約2万件あり、
それを executeSQL('INSERT ...'...) で繰り返し書き込ませていて、非常に時間が掛かっています。
そこで調べたところ、トランザクションを明示的にし、"BEGIN" ~ "COMMIT"で囲むと改善されると調べました。
なので以下のように入れたところ、エラー処理に分岐します。
var webdb={}; webdb.db=null; webdb.open = function(){ webdb.db = window.openDatabase("sample","1.0","sampleDB",20*1024*1024); }; webdb.begin = function(success,error){ webdb.transaction(function(tx){ tx.executeSql('BEGIN TRANSACTION',[],success,error); }); }; webdb.commit = function(success,error){ webdb.transaction(function(tx){ tx.executeSql('COMMIT',[],success,error); }); }; function dbError(tx,e){ var errMsg=''; while(var err in e){ errMsg += err + '=' + e[err] + '\n'; } alert(errMsg); }; if(window.File) { var select = document.getElementById('select'); // ファイルが選択されたとき select.addEventListener('change', function(e) { var fileData = e.target.files[0]; var reader = new FileReader(); reader.onerror = function() { alert('ファイル読み取りに失敗しました'); }; reader.onload = function() { var lineArr = reader.result.split("\n"); var itemArr = []; webdb.open(); webdb.begin(); for (var i = 0; i < lineArr.length; i++) { //dbに書き込み } webdb.commit(); alert("完了しました"); }; // ファイル読み取りを実行 reader.readAsText(fileData,'shift-jis'); } ); };
"BEGIN ~"にIMMEDIATE等を入れたりしてみましたが、結果は変わりませんでした。
エラーの意味も調べてみましたがよくわかりません。
このエラーを直すにはどうしたらいいでしょうか?
また、出来ればエラーの意味も教えて頂ければ幸いです。