Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java与ms access数据库交互-ucanaccess_Java_Ms Access_Jdbc_Ucanaccess - Fatal编程技术网

Java与ms access数据库交互-ucanaccess

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

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

如果将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,仍然没有更改:(!这是作为答案发布的,但它不会尝试回答问题。它可能是编辑或注释。