Java 执行代码花费太多时间

Java 执行代码花费太多时间,java,sql,Java,Sql,下面是我代码的一部分。当我运行代码时,执行时间太长(超过8分钟)。经过几次测试,我发现每个while循环都会导致延迟。我试图将查询移动到循环中,但没有用。 你知道我怎样才能减少延误吗 sql="update rpttbl set cutsum= ? where temp=?"; prepStmt=conCreate.prepareStatement(sql); rs=rptStmt.executeQuery("select temp from rp

下面是我代码的一部分。当我运行代码时,执行时间太长(超过8分钟)。经过几次测试,我发现每个while循环都会导致延迟。我试图将查询移动到循环中,但没有用。 你知道我怎样才能减少延误吗

sql="update rpttbl set cutsum= ? where temp=?";
            prepStmt=conCreate.prepareStatement(sql);
            rs=rptStmt.executeQuery("select temp from rpttbl");
            prepStmt2=createDBcon.prepareStatement("select sum(la2a) from "+Globals.comp+".sarchivelist where lempid= ? and "
                        + "(ldate='"+Globals.year+"-"+Globals.date+"-28') and (la5=22 or la5=33 or la5=2) ");
            while(rs.next()){
                prepStmt2.setString(1, rs.getString(1));
                prepStmt2.execute();
                rs2=prepStmt2.getResultSet();
                prepStmt.setString(2, rs.getString(1));
                if(!rs2.next()){
                }  
                else{
                    prepStmt.setString(1,rs2.getString(1));
                    prepStmt.addBatch();
                }
                prepStmt.executeBatch();
            }

            sql="update rpttbl set promir= ? where temp=?";
            prepStmt=conCreate.prepareStatement(sql);
            rs=rptStmt.executeQuery("select temp from rpttbl");
            prepStmt2=createDBcon.prepareStatement("select la2a from "+Globals.comp+".sarchivelist where lempid= ? and "
                        + "(ldate='"+Globals.year+"-"+Globals.date+"-28') and la6=6 ");
            while(rs.next()){
                prepStmt2.setString(1, rs.getString(1));
                prepStmt2.execute();
                rs2=prepStmt2.getResultSet();
                prepStmt.setString(2, rs.getString(1));
                if(!rs2.next()){
                }  
                else{
                    prepStmt.setString(1,rs2.getString(1));
                    prepStmt.addBatch();
                }
                prepStmt.executeBatch();
            }


            sql="update rpttbl set proch= ? where temp=?";
            prepStmt=conCreate.prepareStatement(sql);
            rs=rptStmt.executeQuery("select temp from rpttbl");
            prepStmt2=createDBcon.prepareStatement("select sum(la2a) from "+Globals.comp+".sarchivelist where lempid= ? and "
                        + "(ldate='"+Globals.year+"-"+Globals.date+"-28') and la6=10001 ");
            while(rs.next()){
                prepStmt2.setString(1, rs.getString(1));
                prepStmt2.execute();
                rs2=prepStmt2.getResultSet();
                prepStmt.setString(2, rs.getString(1));
                if(!rs2.next()){
                }  
                else{
                    prepStmt.setString(1,rs2.getString(1));
                    prepStmt.addBatch();
                }
                prepStmt.executeBatch();
            }
编辑:
我移动了prepsmt.executeBatch();在while()循环之外,但这并没有减少延迟。

执行prepsmt.executeBatch();在while()循环之外

while的哪个部分占用了这么多时间?存在大量记录或调用
executeBatch
?例如,
executeBatch
可以延迟到循环之后吗?或者您可以通过更改查询一次完成
prepsmt1
prepsmt2
吗?您是在每个循环中执行批处理。这不是批处理,而是一次执行一个查询。此外,运行探查器并检查实际花费的时间,而不是“测试”。prepsmt.executeBatch();需要5790毫秒!!!注意,我移动了prepsmt.executeBatch();在while()循环之外。您正在对3个循环使用单个preparestatement,因此请尝试在3个while()循环无效后执行该批处理!