Java与ms access数据库交互-ucanaccess
是否有其他方法可以在无限循环结束时正确关闭与ms access数据库的连接?因为如果将记录插入表中,使用下面的代码,我就看不到插入的新行。看起来数据库没有正确地关闭或者什么的……不知道为什么会这样。如果我手动关闭或打开数据库(我的程序仍在后台运行),一切正常-新的行将出现在我的查询中Java与ms access数据库交互-ucanaccess,java,ms-access,jdbc,ucanaccess,Java,Ms Access,Jdbc,Ucanaccess,是否有其他方法可以在无限循环结束时正确关闭与ms access数据库的连接?因为如果将记录插入表中,使用下面的代码,我就看不到插入的新行。看起来数据库没有正确地关闭或者什么的……不知道为什么会这样。如果我手动关闭或打开数据库(我的程序仍在后台运行),一切正常-新的行将出现在我的查询中 import java.rmi.RemoteException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQL
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);
}
}
}
如果将AutoCommit设置为false(从而禁用自动提交),则应手动调用Connection.commit(),否则数据库中将永远不会有任何内容 您正在将自动提交设置为false。将其设置为true。然后您的更改将永久反映,或者默认情况下,新连接处于自动提交模式,因此您可以删除该行。您显示的代码是正确的,但与您的问题完全无关,因为您只是在阅读。如何插入记录?手动访问,所以使用另一个进程(不同于java进程)?在这种情况下,当这些新数据物理存储在access文件中时,ucanaccess将能够读取这些数据(这可能发生在access中的表关闭时,也可能发生在您关闭数据库时)
此外,如果您使用另一个线程(与轮询中的线程不同)插入数据,您将看到插入的所有记录(没有任何明显的延迟问题)。尝试关闭MSAccess客户端中所有打开的表和查询,然后单击“全部刷新”然后检查数据是否反映了在“//do something”(做某事)中您想做什么?与此无关。比如说,打印一些东西。关键是,我的程序在运行时看不到新的插入内容,就在手动关闭/打开数据库时。我无法使用UCanAccess 2.0.9.4重新创建您的问题。我的测试代码是。当我在Java应用程序运行时从另一个应用程序(使用OLEDB的VBScript)添加新行时,它会在下一次迭代中通过
while(true)
循环显示新行。如果您使用的是较旧版本的UCanAccess,请尝试升级到。我更新了代码并尝试了它…仍然相同,程序将看不到新行。我还更新了问题中的代码。您可以用您正在使用的insert查询更新代码吗?或者您可以尝试创建类似con.createStatement()的语句;我没有插入,某些第三方正在插入新行。我还尝试了con.createStatement();还是一样,我搞不懂这个ms接入。过去,我在oracle数据库上尝试了一些类似的代码。它就像一个符咒…啊,好的。您是否尝试过在调用con.close()的catch部分后添加finally块(与catch块中的类似)?我将autocommit设置为true,仍然没有更改:(!这是作为答案发布的,但它不会尝试回答问题。它可能是编辑或注释。