sqlite データベースにデータを読み書きするアプリケーションがあります。状況によっては、データを書き込んで、DB にあるとすぐにこのデータを読み取る必要があります。以下の例を参照してください。
public void read() throws SQLException {
Connection c = DriverManager.getConnection("jdbc:sqlite:C:\\test.sqlite");
c.setAutoCommit(false);
try {
PreparedStatement p = c.prepareStatement("SELECT * FROM test");
try {
ResultSet rs = p.executeQuery();
try {
while (rs.next()) {
System.out.println(rs.getInt("val"));
}
} finally {
rs.close();
}
} finally {
p.close();
}
} finally {
c.close();
}
}
public void write() throws SQLException {
Connection c = DriverManager.getConnection("jdbc:sqlite:C:\\test.sqlite");
c.setAutoCommit(false);
try {
PreparedStatement p = c.prepareStatement("INSERT INTO test (val) VALUES (?)");
try {
p.setDouble(1, Math.random());
p.executeUpdate();
c.commit();
} finally {
p.close();
}
} finally {
c.close();
}
}
public void demonstrate() {
write();
read();
}
メソッドを呼び出すとdemonstrate
、データは例外なく書き込まれますが、読み取りメソッドは stdout に何も出力しません。アプリケーションを再起動すると、前回の実行で書き込まれたデータを確認できます。上記の例は単純化されています。実際のアプリケーションでは、クエリごとにさらに多くのデータを書き込む必要があります。
では、SQLite が現在のセッションで書き込まれたデータを認識しないのはなぜでしょうか?