存储过程从java中受到攻击,但是从SQL Developer可以正常工作

时间:2016-08-17 23:00:26

标签: oracle stored-procedures jdbc oracle-sqldeveloper callable-statement

public void createCostRecord() throws Exception 
{       
    Context ctx = null;
    Connection conn = null;
    CallableStatement ps = null;
    ResultSet rs = null;
    boolean spReturn = false;

     try{ 
            ctx = new InitialContext();
            javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("CSMWebAppjndi");
            conn = ds.getConnection();
            conn.setAutoCommit(true);
            String sp = "{call usp_CreateCostRecords(?,?)}"; 
                    ps = conn.prepareCall(sp);
                    ps.setInt(1, 1000);
                    ps.setInt(2, 2000);
                    for(int i=0;i<3;i++)
                    {
                    ps.executeQuery();
                    }
     } catch (NamingException e) 
     {
                log.error(e,e);
     } catch (SQLException e) 
     {
                log.error(e,e);
     }
     catch(Exception e)
     {
         log.error(e,e);
     }
     finally {
              if(rs!=null){
                rs.close();
              }
              if(ps!=null){
                ps.close();
              }
              if(conn != null){
                conn.close();                    
              }
              if(ctx != null ){
                ctx.close(); 
              }
            }
}

在调用上面的方法时,行号23 executeQuery在for循环的第一次迭代中工作正常, 在for循环的第二次迭代中,它在executeQuery上被触发,并且该过程永远不会完成执行。

但奇怪的是,当我尝试使用来自SQL开发人员的相同输入的相同过程时,它会被执行多次而没有任何打击。

任何人都可以帮助我理解为什么java中的过程会在第二次尝试时受到影响,但它在SQL开发人员中运行良好。

0 个答案:

没有答案