학습자료(~2017)/오라클

15. 오라클 - Java Stored Procedure

단세포소년 2011. 3. 24. 10:46
반응형

Java Application 은 Oracle Database Server 에서 실행

. Oracle8i 부터  Java Stored Procedure를 사용할 수 있다.
. Java Application 은 Oracle Database Server 에서 실행 된다.
. Java Stored Procedure는 향상된 Application Performance를 제공한다.
. Java Stored Procedure는 비즈니스 룰의 집중된 시행을 제공한다.
. Oracle의 주요 Java Component는 JVM, JDBC, SQLJ이다.
. Oracle의 Server, OCI, Thin 타입의 JDBC Driver를 제공한다.
. Oracle JVM은 AWT를 지원하지 않는다.



 오라클 8 이전 구조



오라클 8 이후 구조


작성 순서



예1)
1. java code 작성
class SayHello {
 public static void main(String[] args){
       System.out.println(say(args[0]));
 }
public static String say(String name){
   return "Hello " + name + "!!!";
 }
}

2. 컴파일
 javac SayHello.java

3. 데이터베이스에 자바 클래스 로드
loadjava -user scott/tiger SayHello.class

4.콜 스펙 작성
CREATE OR REPLACE FUNCTION say_hello(name VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA
NAME 'SayHello.say(java.lang.String) return java.lang.String';

5. 실행
SELECT say_hello('안정환') FROM dual;

6.Java Stored Procedure 삭제
DROP FUNCTION say_hello; //오라클
dropjava -user scott/tiger SayHello.class  //명령행



예2)
1. JDBC 로 작성된 자바 코드 (OS에서 데이터베이스 접속)
import java.sql.*;
class EmpInfoOS
{
      static String dbUrl ="jdbc:oracle:thin:@localhost:1521:orcl";
      static String userId = "scott";
      static String password = "tiger";

       public static void main(String[] args) throws SQLException
       {
            if(args.length !=1){
               System.exit(0);
            }
            System.out.println(getEmpName(Integer.parseInt(args[0])));
        }
       public static String getEmpName(int empNo) throws SQLException
       {
             try{
                          Class.forName("oracle.jdbc.driver.OracleDriver");
              }catch(ClassNotFoundException cnfe) {
                          return cnfe.toString();
              }
       
              Connection connection = DriverManager.getConnection(dbUrl,userId, password);
              Statement statement = connection.createStatement();

              String sqlSystax = "SELECT ename FROM emp WHERE empno =" + empNo;
              ResultSet rs = statement.executeQuery(sqlSyntax);

              String empName = "No data found";
              if(rs.next()) empName = rs.getString("ename");

              statement.close();
              return empName;
       }
}

2. 컴파일
javac EmpInfoOS.java



예3)
 1. JDBC를 이용한 자바코드 (데이터베이스에서 작동되는 메소드)
import java.sql.*;
class EmpInfoDB
{
     public static String getEmpName(int empNo) throws SQLException
     {
         Connection connection = new oracle.jdbc.driver.OracleDriver().defaultConnection();
         Statement statement = connection.createStatement();

         String sqlSyntax = "SELECT ename FROM emp Where empno = " + empNo;
         ResultSet rs = statement.executeQuery(sqlSyntax);

         String empName = "no data found";
         if(rs.next()) empName = rs.getString("ename");

         statement.close();
         return empName;
     }
}

2. 컴파일
javac EmpInfoDB.java

3.데이터베이스에 자바 클래스 로드
loadjava -user scott/tiger EmpInfoDB.class

4.콜 스펙 작성
CREATE OR REPLACE FUNCTION getEmpName(v_empno NUMBER) RETURN VARCHAR2 AS LANGUAGE JAVA
NAME 'EmpInfoDB.getEmpName(int) return java.lang.String';

5. 실행
SELECT getEmpName(7369) FROM dual;




관련 Dictionary
user_objects
반응형