0

我正在创建一个使用 JDBC 从数据库(MySQL)数据加载的应用程序。我的应用程序可以正常运行一段时间(大约 50 分钟)。该程序正在使用计时器,因此我可以刷新一些 JFrame 以显示数据库中的更改。

问题是,一段时间后它显示从数据库加载错误,并且它没有显示加载特定表的错误,而是随机加载表。

我正在使用此代码从 Database 加载,并且我多次将它用于我的 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

我怀疑您在每个计时器滴答声中打开一个新的数据库连接,永远不会再次释放它 - 这将耗尽可用连接,直到它们达到零。

确保只打开一次数据库连接,然后在每个计时器滴答声中引用它。

于 2013-03-16T22:56:42.947 回答
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 回答