gpt4 book ai didi

java - 无法在 Java 中重新打开 MySQL 连接

转载 作者:行者123 更新时间:2023-11-29 07:45:46 25 4
gpt4 key购买 nike

我在 Java 中遇到了一个恼人的错误。我正在连接到 MySQL 数据库并在 Eclipse 中使用 Tomcat。它工作得很好,但只是第一次。如果我重新加载页面或再次运行页面,我会收到 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许操作。

这是我的代码:

    Connection conn = null;
String returnString = null;
Response response = null;
ResultSet rs = null;

try {
System.out.println("Trying to connect");
conn = DbUtil.getConnection(); // Connect to the database
System.out.println("Okay, connected");

query = conn.prepareStatement("SELECT host_firstname FROM host"); //Crashes at this line!
rs = query.executeQuery();

ConvertToJson jsonConverter = new ConvertToJson();
JSONArray jsonArray = new JSONArray();

jsonArray = jsonConverter.convertToJsonArray(rs);


returnString = jsonArray.toString();
response = Response.ok(returnString).build();

}
catch (Exception e) {
e.printStackTrace();
System.out.println("hello!!!!");
}
finally {
if (rs != null){
rs.close();
}
if (query != null) {
query.close();
}
if (conn != null) {
conn.close();
}
}

return response;

我在 Google 搜索过的所有地方都看到,我必须关闭结果集、准备好的语句和连接(按顺序),但一旦关闭连接,我就无法重新打开它。

这是我的 DbUtil 类:

    private static Connection connection = null;

public static Connection getConnection() {

if (connection != null) {
return connection;
}
else {
try {
Properties prop = new Properties();
InputStream inputStream = DbUtil.class.getClassLoader().getResourceAsStream("/db.properties");
prop.load(inputStream);
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String user = prop.getProperty("user");
String password = prop.getProperty("password");

Class.forName(driver);

connection = DriverManager.getConnection(url, user, password);
}
catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

return connection;
}

知道是什么导致了这个问题吗?

谢谢奥马尔:)

最佳答案

这个答案只是为了让你的代码正常工作。但最好的方法是配置连接池。你应该看看。

您的情况是:

if (connection != null) {
return connection; It's returning a closed connection
}

尝试将其更改为:

if (connection != null && !connection.isClosed()) {
return connection;
}

关于java - 无法在 Java 中重新打开 MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27842049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com