2013년 10월 22일 화요일

[자바 JDBC오류]JDBC OCI를 이용한 Array Test 예제

[자바 JDBC오류]JDBC OCI를 이용한 Array Test 예제 


오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  


[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]


JDBC OCI를 이용한 Array Test 예제
 
1.     오라클 쪽에서 배열에 매핑되도록 TYPE을 하나 만듭니다.
 
create or replace type MYARRAY as table of number;
 
2.     아래와 같은 PL/SQL Procedure를 만듭니다이 프로시저를 자바 Application에서 호출하여 배열로 값을 넘겨줘 EMP TABLE에 데이터를 저장 하게 됩니다.
 
create or replace array_test( p_array in myarray )
as
begin
      for i in 1 .. p_array.count
      loop
          dbms_output.put_line( p_array(i) );
          insert into emp(empno, ename) values (p_array(i), 'È«±æµ¿'||to_char(p_array(i)));
          commit;
      end loop;
end;
/
 
3.     자바 애플리케이션을 만듭니다.( Eclipse에서 작성 했습니다.) 주석을 푼 방식으로도 실행해 보세요~ OCI Driver를 사용하기 위해서는 로컬에 SQL*Net이 설치 되어 있어야 합니다즉 오라클 클라이언트등이 설치되어야 겠죠 저의 경우엔 노트북에 오라클 서버가 설치되어 있구요
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
import oracle.jdbc.driver.OraclePreparedStatement;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
 
public class OCIArrayTest
{
    public static void main(String[] args) {
          
           String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:oci8:@WINK";
         String user = "scott"; 
        String password = "tiger";
       
        Connection conn = null;
       
                           try {
                                        Class.forName(driver);
                     conn = DriverManager.getConnection(url, user, password);
                    
                               //DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());                
                               //conn = DriverManager.getConnection("jdbc:oracle:oci8:@wink","scott", "tiger");
                          
                               int intArray[] = { 10,9,8,77,65,26 };
                          
                               ArrayDescriptor descriptor =  ArrayDescriptor.createDescriptor( "MYARRAY", conn );
                          
                               ARRAY array_to_pass =  new ARRAY( descriptor, conn, intArray );
                          
                               OraclePreparedStatement ps =
                                      (OraclePreparedStatement)conn.prepareStatement( "begin array_test(:x); end;" );
                          
                               ps.setARRAY( 1, array_to_pass );
                          
                               ps.execute();
                              
                               System.out.println("OK~~~");
                           }
                           catch(Exception e) {
                               e.printStackTrace();
                           }
    }
 
}
 
 
4.     EMP Table select 해보면 다음과 같이 데이터가 입력되어 있습니다.
 
……
……
……
8            <st2:personname w:st="on">홍길동</st2:personname>8                                                                   
77          <st2:personname w:st="on">홍길동</st2:personname>77                                                                               
65          <st2:personname w:st="on">홍길동</st2:personname>65                                                                               
26          <st2:personname w:st="on">홍길동</st2:personname>26                                                                               
10          <st2:personname w:st="on">홍길동</st2:personname>10                                                                               
9            <st2:personname w:st="on"><st1:sn w:st="on">홍</st1:sn><st1:givenname w:st="on">길동</st1:givenname></st2:personname>

댓글 없음:

댓글 쓰기