我创建了一个每5分钟将数据写入数据库的应用程序.
但是一段时间后会出现此错误:
Error: Data source rejected establishment of connection, message from server: "Too many connections"
我一直在搜索并告诉你在每个请求方之后关闭与数据库的连接.
我试过这个:
conexao.close();
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误:
No operations allowed after conection closed.
如果问题没有得到很好的表述,我会道歉.
谢谢您的帮助
---------------------我尝试但没有奏效--------------------- ------
加
finally{
if(conexao!=null)
conexao.close();
}
Run Code Online (Sandbox Code Playgroud)
Class.forName("com.mysql.jdbc.Driver");
Connection conexao = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/bdTeste", "root", "root");
Statement stm = conexao.createStatement();
BufferedReader reader = new BufferedReader(new FileReader("C:/Users/RPR1BRG/Desktop/test.txt"));
String dados[] = new String[6];
String linha = reader.readLine();
while (linha != null) {
StringTokenizer st = new StringTokenizer(linha, ";\"");
dados[0] = st.nextToken();
dados[1] = st.nextToken();
dados[2] = st.nextToken();
dados[3] = st.nextToken();
dados[4] = st.nextToken();
dados[5] = st.nextToken();
DateFormat dateFormat = new SimpleDateFormat("d-M-yy");
PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement("replace into registos"
+ " (data_registo, hora_registo, IdSensor, Temperatura, Humidade, pt_orvalho) values (?,?,?,?,?,?)");
try {
stmt.setDate(1, new java.sql.Date(dateFormat.parse(dados[0]).getTime()));
stmt.setString(2, dados[1]);
stmt.setString(3, dados[2]);
stmt.setString(4, dados[3]);
stmt.setString(5, dados[4]);
stmt.setString(6, dados[5]);
} catch (java.text.ParseException ex) {
Exceptions.printStackTrace(ex);
}
stmt.executeUpdate();
linha = reader.readLine();
PrintWriter writer = new PrintWriter("C:/Users/RPR1BRG/Desktop/test.txt");
writer.print("");
writer.close();
Verifica();
}
} catch (ClassNotFoundException | SQLException | IOException e) {
System.err.println("Erro: " + e.getMessage());
}finally{
if(conexao!=null)
conexao.close();
}
Run Code Online (Sandbox Code Playgroud)
当你这样的问题出现不正确关闭使用后的连接.
请使用
finally块后catch适当关闭连接.这是因为即使出现意外异常或错误,也要确保连接正确关闭.请注意,finally块内的语句总是被执行.它允许程序员避免因返回,继续或中断而意外绕过清理代码
注意:如果在执行try或catch代码时JVM退出,则finally块可能无法执行.同样,如果执行try或catch代码的线程被中断或终止,则即使应用程序作为一个整体继续,finally块也可能无法执行.
正如您在评论中提出的那样,我已经添加了代码示例以进行实际演示!
Connection con = null
try{
//Establishing connection to datasource
con = DBConnection.getConnection();
//perform DB operations
...
...
...
}catch(SQLException sqlEx){
/*To catch any SQLException thrown during DB
*Operations and continue processing like sending alert to admin
*that exception occurred.
*/
}finally{
/*This block should be added to your code
* You need to release the resources like connections
*/
if(con!=null)
con.close();
}
Run Code Online (Sandbox Code Playgroud)
请注意,Connection变量声明应该在适当的范围内以在finally块中关闭它.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
25828 次 |
| 最近记录: |