1

有没有其他方法可以在无限循环结束时正确关闭与 ms access 数据库的连接?因为如果将一条记录插入到表中,使用下面的代码,我看不到插入的新行/行。看起来数据库没有正确关闭或其他什么......不知道它为什么会这样。如果我手动关闭或打开数据库(我的程序仍在后台运行)一切正常 - 新行/行将出现在我的查询中。

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);
        }
    }
}
4

4 回答 4

1

您显示的代码是正确的,但与您的问题完全无关,因为您只是在阅读。你如何插入记录?手动使用 Access,所以使用另一个进程(不同于 java 进程)?在这种情况下,当它们以物理方式存储在访问文件中时,ucanaccess 将能够读取这些新数据(它可能发生在 access 中的表关闭时,并且总是在您关闭数据库时发生)。

此外,如果您使用另一个线程插入数据(与轮询中的线程不同),您将看到插入的所有记录(没有任何明显的延迟问题)。

于 2015-03-18T13:49:30.237 回答
0

如果您将 AutoCommit 设置为 false (从而禁用自动提交),您应该手动调用 Connection.commit() ,否则将永远不会在数据库中永久结束。

于 2015-03-18T12:59:04.080 回答
0

您将自动提交设置为 false。将其设置为真。然后您的更改将永久反映或默认情况下,新连接处于自动提交模式,因此您可以删除该行。

于 2015-03-18T13:04:06.910 回答
0

尝试关闭 MSAccess 客户端中所有打开的表和查询,然后单击“全部刷新”,然后检查数据是否反映

于 2021-01-23T12:39:17.890 回答