我有一个应用程序可以读取和写入数据到 sqlite 数据库。在某些情况下,我必须写入一些数据,并在数据库中读取这些数据。请参见下面的示例。
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
方法,数据会毫无例外地写入,但读取方法不会在标准输出上输出任何内容。如果我重新启动应用程序,我可以看到上次运行中写入的数据。上面显示的示例已简化。在实际应用程序中,每个查询要写入更多数据。
那么为什么 SQLite 看不到当前会话中写入的数据呢?