0

JDBCを使用してデータベース(MySQL)データからロードするアプリケーションを作成しています。私のアプリケーションは、一定期間 (約 50 分) 正常に動作しています。プログラムはタイマーを使用しているため、JFrame を更新してデータベースの変更を表示できます。

問題は、しばらくするとデータベースからの読み込みエラーが表示され、特定のテーブルの読み込み中にエラーが表示されず、テーブルがランダムに読み込まれることです。

このコードを使用して Database からロードしていますが、データベースの多くのテーブルに対して複数回使用しています

package Mysql;


public class SQLRoom {
public Connection con = null;
public Statement statement= null;
public String JDBC_DRIVER = "com.mysql.jdbc.Driver";
public String username = new String("bonis");
public String password = new String("bonis");
static String dbname = "jdbc:mysql://localhost/pbx";

public String selectRoom_ExtByRoom_Room(String room) {
    try {
        Class.forName(JDBC_DRIVER);
        con = DriverManager.getConnection(dbname,username,password);
        statement= con.createStatement();

        String query = "select * from room where room_room = '" +room+"'";

        String phoneNumber = null;

        final ResultSet rs1=statement.executeQuery(query);
        while (rs1.next()) {

            phoneNumber =rs1.getString("room_ext");

        }
        return phoneNumber;

    }
    catch (final Exception e) {
        JOptionPane.showMessageDialog(null,"SQLRoom selectRoom_ExtByRoom_Room  room:" +room+" room length"+ room.length());
        return null;
    }

}

}

どんな助けでも。

4

3 に答える 3

1

statementを使用して try-catch ブロックを終了するときは、必ず を閉じてくださいfinally。あなたのconnection. connectionを再利用してプログラムの最後で閉じる方が、より適切で高速です。

Java 7 では、次のように実行できます。

try (Connection con = DriverManager.getConnection(dbname, username, password);
      Statement statement = con.createStatement()) {
   ..CODE..
}

古い Java では:

試す {

    //YOUR CODE

  } catch (final Exception e) {

     //YOUR CODE

  } finally {
     try {
        if (statement != null) {
           statement.close();
        }
     } catch (SQLException e) {
        // error handling
     }

     try {
        if (con != null) {
           con.close();
        }
     } catch (SQLException e) {
     // error handling
     }
  }
于 2013-03-16T23:18:21.390 に答える
0

正しいことは次のとおりです。

    if (con == null){
        try {
            con = DriverManager.getConnection(dbname,username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (statement == null){
        try {
            statement= con.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }`

しばらくしてvhunsickerが言ったことをしましたが、それもクラッシュしていました

于 2013-04-05T16:29:27.833 に答える
0

タイマーが刻むたびに新しいデータベース接続を開き、二度と解放しないのではないかと思います-これにより、利用可能な接続がゼロになるまでドレインされます。

DB 接続を 1 回だけ開いてから、すべてのタイマーティックで参照してください。

于 2013-03-16T22:56:42.947 に答える