从Java访问数据库的巨大时间

时间:2012-11-08 13:28:18

标签: java ms-access

我是一名初级java程序员,我终于完成了我的第一个程序,除了学校之外,我自己也是这样做的。)

基础知识是:您可以在其上存储数据并随时检索它。最重要的是,我希望能够在另一台计算机上运行该程序(作为可运行的.jar文件)。

因此我必须安装JRE和microsoft access 2010驱动程序(它们都是32位),程序运行完美,但有一个小问题。

从数据库中存储或删除内容需要很长时间(文字,17秒)。 这是什么原因?我可以改变吗?

修改

这是将Woord类的对象插入数据库的代码。

public static void ToevoegenWoord(Woord woord) {
    try (Connection conn = DriverManager.getConnection("jdbc:odbc:DatabaseSenne")) {
        PreparedStatement addWoord =
            conn.prepareStatement("INSERT INTO Woorden VALUES (?)");
        addWoord.setString(1, woord.getWoord());
        addWoord.executeUpdate();
    } catch (SQLException ex) { 
        for (Throwable t : ex) {
            System.out.println("Het woord kond niet worden toegevoegd aan de databank.");
            t.printStackTrace();
        } 
    }
}

3 个答案:

答案 0 :(得分:0)

每次最有可能创建Connection都是在你的情况下运行缓慢(特别是使用JDBC-ODBC桥)。要确认这一点,请尝试将带有时间戳的print语句放在从DriverManager获取Connection的行之前和之后。如果是这种情况,请考虑不要在每个请求上打开连接,而是打开它一次并重用,更好的是使用某种连接池,有plenty of options可用。

如果情况确实如此,那么实际插入也可能很慢。再次使用print语句进行简单的分析可以帮助您发现代码在大多数情况下花费的时间。

答案 1 :(得分:0)

首先,祝贺你的第一次独立尝试。要回答你的问题/详细说明maximdim的答案,关注的是致电:

try (Connection conn = DriverManager.getConnection("jdbc:odbc:DatabaseSenne")) {

每次使用此功能可能是一个主要瓶颈(或者代码的另一部分可能是。)最重要的是,您需要了解使用日志记录甚至标准打印语句的概念来帮助诊断您的位置正在看一个问题。像这样包装各行代码:

System.out.println("Before Connection retrieval: " + new Date().getTime());
try (Connection conn = DriverManager.getConnection("jdbc:odbc:DatabaseSenne")) {
        System.out.println("AFTER Connection retrieval: " + new Date().getTime());

...看看每次通话通过多少毫秒可以帮助您准确确定瓶颈所处的位置。

答案 2 :(得分:0)

建议:使用另一个数据库,如Derby,hsqldb。它们与MSAccess没有什么不同,(=可以使用基于文件的数据库),但性能更好(比JDBC / ODBC)。甚至可以嵌入到应用程序中(无需额外安装数据库)。