質問: " + rs.getInt("id")); } connection.commit(); } catch(SQLException e) { // if the error message is "out of memory", // it probably means no database file is found System.err.println(e.getMessage()); } finally { try { if(connection != null) connection.close(); } catch(SQLException e) { // connection close failed. System.err.println(e); } } } } ### 試したこと Autocommitを変更してみる。 ### 補足情報(言語/FW/ツール等のバージョンなど) sqlite3.20 Java Eclipse 4.70 当方プログラム経験はかなり浅いです。
回答: 確認しているファイルが間違っている可能性はありませんでしょうか。testJDBC を 実行した時のカレントディレクトリ上にファイル名「test.sqlite」で保存されているはずです。 当方の確認環境は以下ですが、3件のデータがpersonテーブルへ正しくINSERTされていました。 Windows 7 Java 1.8.0_131 sqlite-jdbc-3.20.0.jar Eclipse 4.7.0 参考に、ファイルの存在確認をするコードを示します。 import java.io.File; を追加して、 connection = DriverManager.getConnection("jdbc:sqlite:test.sqlite"); の行の後に入れてみて、確認してみてください。 ``` connection = DriverManager.getConnection("jdbc:sqlite:test.sqlite"); // getConnection() 実行後にファイル「test.sqlite」が作成される // プログラム実行時のカレントディレクトリPATHを取得 String path = new File(".").getAbsoluteFile().getParent(); System.out.println("current directory: " + path); // test.sqlite がカレントディレクトリ上に存在するか確認 File dbfile = new File(path, "test.sqlite"); if (dbfile.isFile()) { // ここに来るはず System.out.println("dbfile: " + dbfile.getAbsolutePath() + " exists."); } else { System.out.println("dbfile: " + dbfile.getAbsolutePath() + " does NOT exist."); } ``` あと、唯一、思い当たりそうな箇所といえばfinally節でstatement を close()していないところですが、connectionとは関係無い部分でかつ、 connectionはcommit()されてテーブルの更新は確定するので関係なさそうです。 試したところではcloseしてもしなくてもテーブルは更新されていました。 でも、プログラミングとしてはclose()しといた方がよさそうです。 他の環境では挙動に影響があるかもしれません。(そういうことが実際にあるかは未確認です) ``` } finally { try { // statement のclose()を追加 if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } ```