我在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;
我已经在任何地方见过我已经用谷歌搜索我必须关闭结果集,准备好的声明和连接(按顺序)但是一旦我关闭了连接,我就可以&# 39;重新打开它。
这是我的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;
}
知道是什么导致了这个问题吗?
由于 奥马尔:)
答案 0 :(得分:2)
这个答案只是为了让您的代码正常运行。但最好的方法是配置连接池。你应该看看它。
你的条件是:
if (connection != null) {
return connection; It's returning a closed connection
}
尝试将其更改为:
if (connection != null && !connection.isClosed()) {
return connection;
}