2

我是一名初级 Java 程序员,我终于自己编写了我的第一个程序,除了学校:)。

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

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

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

编辑:

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

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();
        } 
    }
}
4

3 回答 3

0

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

于 2012-11-08T14:41:50.557 回答
0

在您的情况下,每次创建 Connection 最有可能是缓慢的操作(尤其是使用 JDBC-ODBC 桥)。要确认这一点,请尝试在从 DriverManager 获取连接的行之前和之后放置带有时间戳的打印语句。如果是这种情况,请考虑不要在每个请求上打开连接,而是打开一次并重用,最好使用某种连接池,有很多可用的选项

如果情况并非如此,那么实际插入也可能很慢。再次使用打印语句进行简单的分析应该可以帮助您发现代码大部分时间都花在了哪里。

于 2012-11-08T14:06:20.853 回答
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());

...查看每个调用经过多少毫秒可以帮助您准确确定瓶颈所在。

于 2012-11-08T14:20:19.873 回答