【发布时间】:2012-07-06 21:41:44
【问题描述】:
我有一个应用程序可以读取和写入数据到 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 看不到当前会话中写入的数据呢?
【问题讨论】:
-
> 那么为什么SQLite 看不到当前会话中写入的数据呢?由于您关闭连接并在每次读取或写入内容时再次重新打开它,因此不再是同一个会话。但我想问题是驱动程序管理器无法解析您的连接 URL,并且文件中没有真正写入任何内容。你有任何 SQLException 吗?
-
没有例外。一旦我关闭应用程序,数据就会被写入。如果没有,它不会在重新启动后出现。如果我使用 sqlite 命令行工具进行选择,则在关闭应用程序之前我也看不到数据。