Java与ms访问数据库交互 - ucanaccess

时间:2015-03-18 12:51:53

标签: java ms-access jdbc ucanaccess

在无限循环结束时,还有其他方法可以正确关闭与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);
        }
    }
}

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果将AutoCommit设置为false(从而禁用自动提交),则应手动调用Connection.commit(),否则任何内容都不会永久存在于数据库中。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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