JAVA와 SP를 연동하기 위해선....
1. CallableStatement Interface Load
: 지금까지는 일반 qeury만 날리다 보니 습관적으로 PrepareStatement를 써왔는데 sp를 쓰기 위해서 CallableStatement의
prepareCall이 필요하다.
cstmt = con.prepareCall("{call EBZ_USP_ERPINTERFACE_JAVA(?,?,?,?)}");
call 다음에 프로시저명을 입력하고 ?,?,?,? 은 입력이든 출력이든 갯수를 맞춰야된다.
갯수가 맞지않으면 Binding Runtime Error 발생.
2. JDBC는 일반 쿼리날릴때 쓰던거 그대로...(예제는 앞 게시물에..^^;;)
3. sp에 인자값을 out NUMBER로 지정했기 때문에 아래와 같이 INTEGER 타입으로 지정해서 실행한다.
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.registerOutParameter(2, Types.INTEGER);
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
실행명령어는 execute, executeUpdate 두가지가 실행명령어이다. 암거나 사용해도 무방.
4. example
/************************************************************
** FileName : ProceQuery.java
************************************************************/
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.sql.Types;
class ProceQuery{
private CallableStatement cstmt = null;
private Connection con = null;
static String xcount[] = new String[4];
/* B2B Method Query */
public void B2B(){
con = DBConnect.DbConnection();
try{
int j=1;
cstmt = con.prepareCall("{call EBZ_USP_ERPINTERFACE_JAVA(?,?,?,?)}");
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.registerOutParameter(2, Types.INTEGER);
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.execute(); // or cstmt.executeUpdate();
for(int i=0;i<4;i++){
xcount[i] = Integer.toString(cstmt.getInt(j));
j++;
}
con.close();cstmt.close();
}catch(SQLException e1){}
}
}