【发布时间】:2017-07-04 03:56:31
【问题描述】:
我正在创建一个真正的 DB 密集型 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(query);触发错误并使程序崩溃。我认为这里的问题是数据库已经打开了一个连接并且无法处理 conn3,但是我需要在 while 循环中使用这些其他连接,同时我需要能够在 if while 中下达命令周期。我怎样才能使新订单不干扰while循环但同时执行查询?
(查询尝试执行的操作可能在上面的代码中不起作用,这是一个更大类的 sn-p。)
【问题讨论】:
-
请显示完整的堆栈跟踪
-
你为什么放
mysql和sql-server标签?您使用的是什么确切的数据库? -
这是因为你永远不会关闭你的连接。为此使用更好的数据结构。将您的结果集保存在地图或数组中。或者为此使用更好的查询。