我正在创建一个真正的数据库密集型java程序,但我在连接上遇到错误.代码是:try{Statement st;ResultSet rs;conn = DBConnection.dbconnection();st = conn.createStatement();String s = select * from tab2DB ord...
我正在创建一个真正的数据库密集型java程序,但我在连接上遇到错误.代码是:
try{
Statement st;
ResultSet rs;
conn = DBConnection.dbconnection();
st = conn.createStatement();
String s = "select * from tab2DB order by Scadenza";
rs = st.executeQuery(s);
while(rs.next()){
ResultSet rs2;
PreparedStatement st2;
conn2 = DBConnection.connection();
String s2 = "select * from Prodotti where Nome = ?";
st2 = conn2.prepareStatement(s2);
st2.setString(1, rs.getString("Prodotto"));
rs2 = st2.executeQuery();
while(rs2.next()){
Date localDate = new Date();
String scadenza = rs.getString("Scadenza");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALIAN);
Date date = format.parse(scadenza);
if(localDate.after(date)){
conn3 = DBConnection.dbconnection();
String query ="insert into tabDB values ('"+nomeord+"','"+prodottoord+"','"+quantitàord+"')";
Statement stmt;
stmt = conn3.createStatement();
stmt.executeUpdate(query);
conn3.close();
continue;
}
//other building of interface in the while, omitted for clarity purpose
conn2.close();
rs2.close();
}
conn.close();
rs.close();
}
catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
错误发生在if(localDate.after(date)){…}
其中stmt.executeUpdate(查询);触发错误并使程序崩溃.我认为这里的问题是DB已经打开连接并且无法处理conn3,但是我需要那些其他连接用于while循环,同时我需要能够在if内部给出命令这个循环.我怎样才能使新订单不会干扰while循环但同时执行查询?
(查询尝试执行的操作可能无法在上面的代码中工作,这是一个更大类的方法的片段)
感谢您的帮助!
解决方法:
您可以使用try-with-resources,这可确保在语句结束时关闭所有资源.
例:
try (Connection con = ConnectionManager.dbconnection();
Statement statement = con.createStatement();
ResultSet resultSet = statement.executeQuery(query)) {
while(resultSet.next) {
//Add desired values to data structure
}
}
此外,正如其他用户所提到的,我建议迭代结果并添加类似List,Set或Map的内容.这样,您可以关闭连接并仍然可以从另一个对象访问数据.
本文标题为:java“数据库被锁定”SQL异常
- SpringBoot父子线程数据传递的五种方案介绍 2023-05-24
- java数据类型与变量的安全性介绍 2023-03-21
- 如果我在sql而不是’in’中使用’或’,那么Java会出现堆空间错误 2023-11-01
- 浅谈springboot如何保证多线程安全 2023-08-11
- Spring Boot整合ELK实现日志采集与监控 2023-01-24
- Spring项目中使用Cache Redis实现数据缓存 2022-11-29
- EasyExcel工具读取Excel空数据行问题的解决办法 2023-04-07
- Java效率提升神器之Guava-Joiner 2023-02-19
- Java语言中finally是否一定会执行你知道吗 2022-10-24
- 远程调用@FeignClient注解属性使用详解 2023-06-17