CallableStatement

 

Oracle 에서 입력된 stored procedure 를 java에서 실행해서 결과를 얻고 싶으시다면

Statement 대신에 CallableStatement 라는걸 쓰시면 됩니다.

 

그 뒤에는 어차피 insert, update 같은 것들과 같이 성공 또는 실패, 성공시 몇개가 성공했는지,

query 인 경우에는 ResultSet 받아서 fetch 하면서 값 뽑아서 쓰시면 됩니다.

Connection 까지는 똑같고 그 다음부터가 약간 다른데 대충 아래와 같습니다.

 

              // 위에서 JDBC  드라이버 잡고 Connection 까지 맺은 상태...

      CallableStatement cs = con.prepareCall("{call myStoredProcedure(?,?,?)}");
      cs.setInt(1,2
);
      cs.registerOutParameter(2
, java.sql.Types.VARCHAR);
      cs.registerOutParameter(3
, java.sql.Types.INTEGER);
      cs.execute();
      System.out.println("*name : "+ cs.getString(2) +"*age : "+ cs.getInt(3
));
      cs.close();
      con.close();

 

 

 

 

 

PreparedStatement 

CallableStatement 

 

자바에서 저장프로시져 호출하는건 PreparedStatement  클래스를 사용하는 방법과 CallableStatement  클래스

 

를 사용하는 방법이 있습니다.

 

먼저 CallableStatement 클래스를 사용하여 저장프로시져 호출 방법

 

ResultSet rs = null;

CallableStatement cs = null;

 

cs = conn.prepareCall("{call dbo.comempsearch(?)}");
cs.setString(1,"S");
rs = cs.executeQuery();

 

이렇게 하면 디비에 저장되어있는 comempsearch라는 프로시져를 호출 하는겁니다.

 

?표는 저장프로시져에 받을 파라미터를 넘길수 있습니다.(단점: 저장프로시져에서 선언한 순서대로 파라미터를

 

넘겨야 됩니다.)

 

PreparedStatement 클래스를 사용하는 방법

PreparedStatement pstmt = null;

ResultSet rs = null;

 

String sqlQuery = "exec jaorderprc @pWORKGB ='S', @pUSERID ='"+userID+"', @pFIRSTDATE ='"+firstDate+"'";
sqlQuery += ", @pLASTDATE ='"+lastDate+"', @pPartNo ='"+Sabun+"', @pORDNUM ='"+OrKey+"'";
pstmt = conn.prepareStatement(sqlQuery);
rs = pstmt.executeQuery();

 

이렇게 해서 jaorderprc프로시져를 호출 할수 있습니다. 이건 프로시져에서 선언한 변수들을 수동으로 값을 정

 

해줄수 있습니다.(변수 선언 순서를 신경 안써도 된다는 장점이 있습니다.)

 

이렇게 해서 프로시져를 호출 하면 select문경우 값을 받을때는

 

 

while(rs.next()){
    aaa vo = new aaa();
    vo.ORDNUM = rs.getString("ORDNUM");
    vo.PartNo = rs.getString("PartNo");
    vo.FACTGB = rs.getString("FACTGB");
    vo.ORDATE = rs.getString("ORDATE");
    vo.ORSER = rs.getInt("ORSER"); 
    vo.SABUN = rs.getString("SABUN");
    vo.CUSTCD = rs.getString("CUSTNAME1");
    vo.ORDAN = rs.getInt("ORDAN");
    vo.ORDQTY = rs.getInt("ORDQTY");
    arrList.add( vo );
   } 

 

제가 짠 소스는 변수만 선언해둔 클래스를 사용하여 한것입니다.

 

 

 

 

Posted by 에시드 :