为什么在这种情况下有很多连接(MySQLNonTransientConnectionException)

时间:2014-04-04 02:24:44

标签: mysql select prepared-statement

我使用PreparedStatement选择了一个例外。

Got an exception accessing TestCase data! null

Problem to connect.

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:

Too many connections

这是我的代码:

public Integer getTypeByInputAndProblemId(String inputTestCase, Long problemId) {

    String sql = "SELECT type FROM test_case where problem_id= ? and input= ?";

    Integer type = 0;

    try {

        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setLong(1, problemId);
        ps.setString(2, inputTestCase);

        ResultSet rs = ps.executeQuery();

        if (rs.next()) {
            type = new Integer(rs.getInt("type"));
        }
        rs.close();
        ps.close();

    } catch (Exception e) {
        System.err.println("Got an exception accessing TestCase data! " + e.getMessage());
    }

    return type;
}

在第PreparedStatement ps = connection.prepareStatement(sql)行; 我的问题是因为连接有时是空的(调试显示这个)。

我猜这是因为有很多联系,但我不知道为什么会这样。

我想要一些帮助!

1 个答案:

答案 0 :(得分:1)

是的,问题发生是因为您的服务器达到了MySQL服务器接受的最大连接数。

首先,您需要查看MySQL中是否为多个连接配置了正确的号码:max_connections如果这看起来很低,你可以增加这个数字,以便修复"这个问题。

其次,如果数字有意义,您可能会使用比您想象的更多的连接。 可能是因为您在应用中打开了连接而未关闭它们。

检查目前服务器已使用多少个连接。

show status like 'Max_used_connections';

重新启动数据库服务时会重置此数字。