У меня есть раздражающая ошибка на Java. Я подключаюсь к базе данных MySQL и использую Tomcat в Eclipse. Он работает блестяще, но только в первый раз. Если я снова загружу страницу или запустил страницу, я получаю com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException
: после закрытия соединения никаких действий не разрешено.Невозможно повторно открыть соединение MySQL в Java
Это мой код:
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;
Я видел везде я Гугл, что я должен закрыть набор результатов, подготовленное заявление, и соединение (в таком порядке), но как только я закрыл соединение, я не могу его снова открыть.
Это мой 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;
}
Любая идея, что является причиной этой проблемы?
Благодаря Омар :)
http://stackoverflow.com/questions/7565143/com-mysql-jdbc-exceptions-jdbc4-mysqlnontransientconnectionexception- no-operati – suiterdev
Похоже, вам нужно смотреть на уровень сеанса, а не на уровень соединения. Ваш код не выбрасывается, он вызывается MySQL из драйвера JDBC. – suiterdev