2

私は中学生の Java プログラマーで、ついに学校を離れて、すべて自分で最初のプログラムを作成しました :)。

基本は、データを保存していつでも取得できることです。主なことは、このプログラムを別のコンピューターで (実行可能な .jar ファイルとして) 実行できるようにしたいということです。

したがって、JRE および Microsoft Access 2010 ドライバー (どちらも 32 ビット) をインストールする必要がありました。プログラムは完璧に動作しますが、小さな問題が 1 つあります。

データベースに何かを保存または削除するには、何年もかかります (文字通り 17 秒)。これの原因は何ですか?変更できますか?

編集:

クラス Wood のオブジェクトをデータベースに挿入するコードを次に示します。

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とそれほど違いはありませんが(=ファイルベースのDBを使用できます)、パフォーマンスは向上します(JDBC / ODBCよりも)。また、アプリケーションに組み込むこともできます(DBを追加インストールする必要はありません)。

于 2012-11-08T14:41:50.557 に答える
0

ほとんどの場合、毎回接続を作成するのは、あなたの場合の操作が遅くなります(特にJDBC-ODBCブリッジを使用する場合)。これを確認するには、DriverManager から Connection を取得する行の前後にタイムスタンプ付きの print ステートメントを配置してみてください。その場合は、リクエストごとに接続を開くのではなく、一度開いて再利用することを検討してください。さらに、何らかの接続プーリングを使用することをお勧めします。利用可能なオプションはたくさんあります。

そうでない場合、実際の挿入も遅くなる可能性があります。ここでも、print ステートメントを使用した単純なプロファイリングは、コードが最も多くの時間を費やしている場所を見つけるのに役立ちます。

于 2012-11-08T14:06:20.853 に答える
0

まずは、初の単独進出おめでとうございます。あなたの質問に答える/マキシムディムの答えを詳しく説明するには、次の呼び出しが懸念されます。

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 に答える