我有一个应用程序可以读取和写入数据到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
方法,则数据写入时没有任何异常,但read方法在stdout上没有输出任何内容。如果我重新启动应用程序,我能够看到上次运行中写入的数据。
上面示出的示例被简化。在实际应用程序中,每个查询要写入的数据要多得多。
那么为什么SQLite看不到当前会话中写入的数据?
答案 0 :(得分:2)
我注意到您正在使用驱动程序管理器来获取SQLConnection。 您可能忘记在驱动程序管理器中注册SQL驱动程序。 你应该在你的代码中的某个地方有这样的东西(你只需要做一次):
DriverManager.registerDriver(new org.sqlite.JDBC());
编辑:
您的代码中有一个小错误:您正在编写双打和读取整数。 为了测试,我创建了一个表“test”,其列为“val”,类型为double。
每次运行程序时,输出中都会写一个新行:
0
0
0
这是运行程序3次后的输出。数据库有3行,每次运行程序时都会添加一行(0值是因为你从double值读取int,而random则返回0到1之间的值)。
我唯一的解释可能是您的SQLite驱动程序中存在错误。