アプリ上でメモを作っています。
これをStringでSQLiteで保存しています。
このSQLiteをバックアップしたファイルをインポートする際に今回の質問の問題が発生します。
このメモが1行の時は問題ないのですが、2行目になったときにエクセプションが発生します。
==exceptionメッセージ==
落ちる原因は
java
1 private void importTable(Context context, SQLiteDatabase db, String tableName){ 2 BufferedReader bufferedReader = null; 3 boolean beginedTransaction = false; 4 5 try { 6 File file = new File(context.getFilesDir(), tableName + ".csv"); 7 FileInputStream fis = new FileInputStream(file); 8 bufferedReader = new BufferedReader(new InputStreamReader(fis)); 9 10 db.beginTransaction(); 11 beginedTransaction = true; 12 13 String line; 14 while((line = bufferedReader.readLine()) != null ){ 15 String[] values = line.split(",", -1); 16 StringBuilder stringBuilder = new StringBuilder(); 17 stringBuilder.append("INSERT INTO " + tableName + " VALUES("); 18 for(String value : values){ 19 stringBuilder.append("\"" + value + "\","); 20 } 21 stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(",")); 22 stringBuilder.append(");"); 23 db.execSQL(stringBuilder.toString()); 24 } 25 db.setTransactionSuccessful(); 26 27 } 28 catch (IOException e) { 29 e.printStackTrace(); 30 } 31 finally { 32 if( bufferedReader != null ) { 33 try { bufferedReader.close(); } catch( Exception e ) {}; 34 } 35 36 if( beginedTransaction ) { 37 db.endTransaction(); 38 } 39 } 40 }
このコードのString lineのところで、メモの1行目しか取れていないことが原因だとわかりました。
1行目しか取れていないので、2行目分だ怪我残って他の行データがないのに2回目のwhileが始まるので落ちてしまうのが原因です。
おそらく改行コードの「\n」があるから、buffereReaderで切断した状態で入ってくるのかなと思うのですが、どういった解決方法がありますか?
教えて下さい。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー