###前提・実現したいこと
monacaでスマホアプリの開発を行っています。
使用しているのはjavascript,AngularjS,onsen ui,SQLiteです。
その中で、sqliteにデータを書き込んで、参照を行おうとしています。
csvからデータを書き込んで、リストで表示して選択などを行うことは出来ているのですが、
元々のcsvのデータ数が2万件程なのに対し、
"select" で参照した時の[object SQLresultSet]の件数や、"select count(*)" で行数を検索すると、1000行程しか入っていなかったりします。
csvを読み取った時の配列の数は元々のデータ数と一致しています。
全件読んで、その中から特定のものを選んでリストに表示して選択出来る様にしたいのですが、
どこか間違っているのでしょうか。
###該当のソースコード
var webdb = {}; webdb.db = null; // File APIに対応しているか確認 // Databaseオープン webdb.open = function() { var dbSize = 5 * 1024 * 1024; webdb.db = window.openDatabase('sample', '1.0', 'sampleDB', dbSize); }; // データ作成 webdb.insert = function(name, d,eigc,kana, success, error) { webdb.db.transaction(function(tx){ tx.executeSql('INSERT INTO SAMPLE(CD,NAME, EIGC, KANA) VALUES (?,?,?,?)', [name, d,eigc,kana], insertSuccess, dberror); }); }; if(window.File) { var select = document.getElementById('select'); // ファイルが選択されたとき select.addEventListener('change', function(e) { //DBを一度削除 delData(); // 選択されたファイルの情報を取得 var fileData = e.target.files[0]; var e_all = document.createElement("innerHTML"); var reader = new FileReader(); // ファイル読み取りに失敗したとき reader.onerror = function() { alert('ファイル読み取りに失敗しました'); }; // ファイル読み取りに成功したとき reader.onload = function() { alert('読み取りを開始します'+reader.result.split("\n").length); var cnt=0; // 行単位で配列にする var lineArr = reader.result.split("\n"); // 行と列の二次元配列にする var itemArr = []; for (var i = 0; i < lineArr.length; i++) { itemArr[i] = lineArr[i].split(","); } for (var i = 0; i < itemArr.length; i++) { if(itemArr[i][0]!= ''){ writeDB(itemArr[i][0],itemArr[i][1],itemArr[i][2],itemArr[i][3]); } } alert("完了しました"); }; // ファイル読み取りを実行 reader.readAsText(fileData,'shift-jis'); } ); }; function writeDB(cd,name,eigc,kana){ tokdb.insert(cd,name,eigc,kana,insertSuccess,dbError); } // エラー function dbError(tx, e) { alert('エラー\n' + e.message); } // データ作成が成功 function insertSuccess(tx) { //alert('データを作成しました。'); }
//DBを読んでリストに書き出す部分 var app = ons.bootstrap("myApp", ["onsen"]); app.controller("page1Controller", ["$scope", function($scope) { $scope.srchtk = function(){ $scope.tctable=[]; var list= []; var sql = null; var wdb = window.openDatabase('sample', '1.0', 'sample', 5 * 1024 * 1024); wdb.transaction(function(tx){ spl="SELECT * FROM SAMPLE ORDER BY KANA"; tx.executeSql(spl,[],function(tx,r){ alert('データ数:'+r.rows.length); //1000件程度 for(var i = 0; i < r.rows.length; i++){ //配列(list)に格納 } $scope.tctable = list; $scope.$apply(); alert("完了しました"); },function(){ console.log("error select"); }); }); }; }]);
###試したこと
var reader = new FileReader; reader.onload = function(){ alert(reader.result.split("\n").length; ... }
上記でファイルを読んで、splitで分けた時の行数はcsvのデータ数と同じ約2万件で
var webdb={}; var webdb.db = openDatabase('sample', '1.0', 'sample', 5 * 1024 * 1024); webdb.db.transaction(function(tx){ var sql="SELECT * FROM SATKUI ORDER BY KANA"; tx.executeSql(sql, [], success, error); }); }
上記でデータベースを参照した時、[object SQLresultSet]に入っている".rows"の長さ(.length)が1000件程度だったり、200件程度だったりと、その時々で値が変わったりし、いずれも2000件を超えることはありませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。