java“数据库被锁定”SQL异常

我正在创建一个真正的数据库密集型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异常

基础教程推荐