Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 Ucanaccess太慢了_Java_Ms Access_Ucanaccess_Jackcess - Fatal编程技术网

Java Ucanaccess太慢了

Java Ucanaccess太慢了,java,ms-access,ucanaccess,jackcess,Java,Ms Access,Ucanaccess,Jackcess,我已正确添加了所有必要的罐子: Ucanaccess 3.0.4 commons-lang-2.6 commons-logging-1.1.1 hsqldbd jackcess-2.1.3 我的数据库是100MB。虽然只使用jackess,但同样的查询需要4-5秒,而这个查询大约需要1-2分钟。我做了一些研究,发现Ucanaccess可以访问整个数据库。我怎样才能禁用它?还是有必要 我也尝试了参数(内存、单连接、SkipIndex),但没有改变任何东西 我必须使用UcanAccess,因为我

我已正确添加了所有必要的罐子:

  • Ucanaccess 3.0.4
  • commons-lang-2.6
  • commons-logging-1.1.1
  • hsqldbd
  • jackcess-2.1.3
我的数据库是100MB。虽然只使用jackess,但同样的查询需要4-5秒,而这个查询大约需要1-2分钟。我做了一些研究,发现Ucanaccess可以访问整个数据库。我怎样才能禁用它?还是有必要

我也尝试了参数(内存、单连接、SkipIndex),但没有改变任何东西

我必须使用UcanAccess,因为我想使用JasperReports。为此,我需要一个有效的连接

我的代码:

        try {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        String connectionURL = "jdbc:ucanaccess://P:/myDatabase.accdb";
        Connection conn = DriverManager.getConnection(connectionURL, "", "");
        Statement stmt = conn.createStatement();

        String query =
                "Select * from REQ_ACQ_ACQUISITIONS";


        ResultSet rs = stmt.executeQuery(query);
        while ( rs.next() ) {
            int numColumns = rs.getMetaData().getColumnCount();
            for ( int i = 1 ; i <= numColumns ; i++ ) {
                if (i > 1) System.out.print(",  ");
                String columnValue = rs.getString(i);
                System.out.print(columnValue + " " + rs.getMetaData().getColumnName(i));
            }
            System.out.println("");
        }
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
试试看{
类forName(“net.ucanaccess.jdbc.UcanaccessDriver”);
String connectionURL=“jdbc:ucanaccess://P:/myDatabase.accdb”;
连接conn=DriverManager.getConnection(connectionURL,“,”);
语句stmt=conn.createStatement();
字符串查询=
“从请求ACQ采集中选择*”;
ResultSet rs=stmt.executeQuery(查询);
while(rs.next()){
int numColumns=rs.getMetaData().getColumnCount();
对于(inti=1;i1)系统输出打印(“,”;
String columnValue=rs.getString(i);
System.out.print(columnValue+“”+rs.getMetaData().getColumnName(i));
}
System.out.println(“”);
}
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(SQLE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}


请注意,这不是真正的“连接时间”,而是整个JVM生命周期中第一次连接的时间。这是一个启动时间,类似于数据库启动时间。以下所有连接都是独立的。有几种方法可以大大缩短第一次连接的时间。最简单的方法是构建一个过滤器数据库,作为外部表链接报表所需的唯一表。

请注意,这不是真正的“连接时间”,而是整个JVM生命周期中第一次连接的时间。这是一个启动时间,类似于数据库启动时间。以下所有连接都是独立的。有几种方法可以大大缩短第一次连接的时间。最简单的方法是构建一个筛选器数据库,将报表所需的唯一表作为外部表链接起来。

执行时速度很慢:Connection conn=DriverManager.getConnection(connectionURL,“,”);
P:
是网络共享的映射驱动器号吗?如果是这样的话,你能试着将数据库文件复制到你的本地硬盘上并打开它来比较执行时间吗?亲爱的Gord,它确实是一个映射的硬盘。但是我在本地尝试了,响应完全相同(如果可能的话甚至更慢?)执行时速度很慢:Connection conn=DriverManager.getConnection(connectionURL,“,”);
P:
是网络共享的映射驱动器号吗?如果是这样的话,你能试着将数据库文件复制到你的本地硬盘上并打开它来比较执行时间吗?亲爱的Gord,它确实是一个映射的硬盘。但是我在当地试过,反应完全一样(如果可能的话甚至更慢?)你好,贾马迪,你会怎么做?你认为它必须在Ucanaccess中完成吗?不,当然,它已经起作用了。您只需创建(使用ms access)一个新的access数据库和链接表,这些表必须指向原始数据库中的原始表(请参见外部数据)。然后你必须通过ucanaccess连接新创建的数据库。问题是我不想让数据库成倍增长——特别是因为我不知道要使用多少表(可能全部)。另外,我无法在此(业务)计算机上安装Access。假设我只想通过java解决这个问题。@pathat0r-对您的一些评论做出回应:“我不知道我要使用多少表(可能全部)。”然后您需要镜像所有表。“另外,我不能在这台(商业)计算机上安装Access。”所以您确实需要使用Access数据库,但不能使用Access软件?那是。。。不幸。“我必须使用UcanAccess,因为我想使用JasperReports。”不一定。您也可以使用Java 7和Java自己的JDBC-ODBC桥,或者您可以使用其他(商业?)JDBC驱动程序或JDBC-ODBC桥解决方案。
所以这是一个启动时间,类似于数据库启动时间。
是的……正如您所说。。。第一次连接很慢,但其余时间(只要我们保持对已打开连接的引用)DB连接/事务都非常快Hello Jamadei,您将如何继续这样做?你认为它必须在Ucanaccess中完成吗?不,当然,它已经起作用了。您只需创建(使用ms access)一个新的access数据库和链接表,这些表必须指向原始数据库中的原始表(请参见外部数据)。然后你必须通过ucanaccess连接新创建的数据库。问题是我不想让数据库成倍增长——特别是因为我不知道要使用多少表(可能全部)。另外,我无法在此(业务)计算机上安装Access。假设我只想通过java解决这个问题。@pathat0r-对您的一些评论做出回应:“我不知道我要使用多少表(可能全部)。”然后您需要镜像所有表。“另外,我不能在这台(商业)计算机上安装Access。”所以您确实需要使用Access数据库,但不能使用Access软件?那是。。。不幸。“我必须使用UcanAccess,因为我想使用JasperReports。”不一定。您也可以使用Java7