我正在运行此方法以使用DBCP连接池更新SQL:
整整8次之后,方法setValue停止这样做,并且不发送数据。

    public static void setValue(String user, Integer id){
    Connection connection = null;
    try {
        try {
            connection = DataSource.getInstance().getConnection();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        ttl++;
        PreparedStatement ps = connection.prepareStatement("REPLACE INTO " + "accounts"+ " (user,id) VALUES(?,?)");
        ps.setString(1, user);
        ps.setInt(2, id);
        ps.executeUpdate();
                    ps.close();
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    return;
}

我不熟悉MySQL或连接池,我不知道这里出了什么问题。请帮助我解决此问题或提供任何建议?非常感谢!

最佳答案

是的,您应该关闭连接,这只会将其返回到池中。基本上,您应该将它添加到方法的finally{}块中。希望这有帮助。

public static void setValue(String user, Integer id){
    Connection connection = null;
    try {
        try {
            connection = DataSource.getInstance().getConnection();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        ttl++;
        PreparedStatement ps = connection.prepareStatement("REPLACE INTO " + "accounts"+ " (user,id) VALUES(?,?)");
        ps.setString(1, user);
        ps.setInt(2, id);
        ps.executeUpdate();
                    ps.close();
    } catch (SQLException ex) {
        ex.printStackTrace();
    } finally {
        if (connection != null) connection.close();
    }
    return;
}

10-05 18:19