0

我已经正确添加了所有必要的 JARS:

  • Ucanaccess 3.0.4
  • commons-lang-2.6
  • 公共日志记录-1.1.1
  • 数据库
  • jackcess-2.1.3

我的数据库是 100MB。仅使用 Jacksess 时,相同的查询需要 4-5 秒,而这一查询大约需要 1-2 分钟。我做了一些研究,发现 Ucanaccess 镜像了整个数据库。我怎样才能禁用它?还是有必要?

我也尝试了参数(内存、singleConnection、skipIndexes),但它没有改变任何东西。

我必须使用 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();
    }
4

2 回答 2

3

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

于 2016-04-27T14:51:38.757 回答
0

对我来说,我遇到了类似的问题,但主要是因为在我的代码中,我在运行查询后从未关闭我的连接。

于 2021-09-16T05:39:10.253 回答