在无限循环结束时,还有其他方法可以正确关闭与ms访问数据库的连接吗?因为如果将记录插入到表中,使用下面的代码,我将无法看到插入的新行/行。看起来数据库没有核心关闭或者什么......不知道它为什么会像这样。如果我手动关闭或打开数据库(我的程序仍然在后台运行)一切正常 - 新的行/行将出现在我的查询中。
import java.rmi.RemoteException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws RemoteException,
InterruptedException, SQLException {
while (true) {
Connection con = DBConnection.getDBConnection();
System.out.println("Connection OK!");
Statement s = null;
try {
ResultSet rs = null;
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
con.setAutoCommit(true);
rs = s.executeQuery("SELECT Tel, Msg, Procesat FROM RcvMsg WHERE Procesat = 'NOK'");
while (rs.next())
{
String pn = rs.getString(1);
String str = rs.getString(2);
//do something
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
s.close();
con.close();
}
Thread.sleep(5000);
}
}
}
答案 0 :(得分:1)
您显示的代码是正确的,但与您的问题完全无关,因为您只是在阅读。你如何插入记录?手动使用Access,所以使用另一个进程(不同于java进程)?在这种情况下,ucanaccess将能够在存储在访问文件中时读取这些新数据(并且可能在访问时关闭表并且总是在关闭数据库时)。
此外,如果您使用另一个线程(与轮询中的那个不同)插入数据,您将看到插入的所有记录(没有任何明显的延迟问题)。
答案 1 :(得分:0)
如果将AutoCommit设置为false(从而禁用自动提交),则应手动调用Connection.commit(),否则任何内容都不会永久存在于数据库中。
答案 2 :(得分:0)
您正在设置自动提交错误。将其设置为true。然后,您的更改将永久反映,或者默认情况下,新连接处于自动提交模式,因此您可以删除该行。
答案 3 :(得分:0)
尝试关闭 MSAccess 客户端中所有打开的表和查询,然后单击“全部刷新”,然后检查数据是否反映