Java External Procedure 사용

생성된 Java External Procedure를 사용하여 Java 애플리케이션 프로그램을 작성하는 방법을 설명합니다.

일반적으로 Java를 이용하여 클래스 파일을 생성하고 패키징 과정을 거치면 애플리케이션 프로그램을 개발할 수 있습니다. 또한 데이터베이스에 단순히 Java 객체를 생성함으로써 별도의 컴파일 및 패키징 과정없이 다양한 용도의 애플리케이션 프로그램으로 작성할 수도 있습니다.

본 장에서는 생성된 Java External Procedure를 사용하여 Java 애플리케이션 프로그램을 작성하는 방법 을 설명합니다.

기본 Java 애플리케이션 프로그램

개발 방법

사용자는 일반적으로 Java 애플리케이션 프로그램을 개발하는 방법과 마찬가지로 애플리케이션 프로그램을 작성할 수 있습니다.

예를 들면 아래와 같습니다.

SQL> CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaExtproc" AS
     public class SimpleMath {
         public static int findMax(int x, int y) { 
             if (x >= y) return x;
             else return y;
         }
     }
     /

Java 출력 전송

사용자는 DBMS_JAVA 패키지를 사용하여 Java 애플리케이션 프로그램의 출력 내용을 콘솔 화면으로 확인할 수 있습니다. 예를 들면 아래와 같습니다.

SQL> CREATE OR REPLACE AND RESOLVE Java SOURCE NAMED "JavaExtproc" AS
     public class SimplePrint {
         public static void printMax(int x, int y) { 
         if (x >= y) System.out.println("Max="+x); 
         else System.out.println("Max="+y);
         }
     }
     /
Java Source 'JavaExtproc' created.

SQL> CREATE OR REPLACE PROCEDURE print_max(x pls_integer, y pls_integer) IS 
     LANGUAGE JAVA NAME 'SimplePrint.printMax(int, int)';
     /
Procedure 'PRINT_MAX' created.

SQL> set serveroutput on
SQL> call dbms_java.set_output(2000); 

PSM called.

SQL> BEGIN print_max(1, 2); END;
     / 
Max=2

PSM completed.

SQL>

DBMS_JAVA 패키지에 대한 자세한 내용은 "Tibero tbPSM 참조 안내서"를 참고합니다.


Internal JDBC Driver

사용자는 JDBC 인터페이스를 이용하여 애플리케이션 프로그램을 개발할 수 있는 것처럼 Java 객체 내부에 Internal JDBC Driver를 사용할 수 있습니다. Java External Procedure는 새롭게 데이터베이스 서버와 연결하여 통신하는 일반적인 형태의 JDBC 프로그램이 아닌 기존 트랜잭션을 이용할 수 있는 Internal JDBC Driver를 사용할 수 있습니다.

데이터베이스 서버와 연결

일반적인 JDBC 인터페이스의 연결 과정은 아래와 같습니다.

Connection conn = DriverManager.getConnection("jdbc:tibero:localhost:9999:tibero",
                                              "tibero", "tibero");

Internal JDBC Driver를 사용하는 방법은 아래와 같습니다.

Connection conn = DriverManager.getConnection("jdbc:default:connection:");

기존의 JDBC 인터페이스의 방식을 사용하는 경우에는 현재 트랜잭션에 참여하지 못하고 새로운 세션으로 시작하게 됩니다. 그러나 Internal JDBC Driver를 사용하는 경우에는 현재 트랜잭션에 참여하여 아직 커밋되지 않은 내용까지도 커밋하거나 롤백할 수 있습니다.

Internal JDBC Driver를 사용하여 데이터베이스 서버에 연결하고 나면, 일반적인 JDBC 인터페이스를 사용하는 방식 그대로 사용할 수 있습니다.

사용 예제

아래는 Internal JDBC Driver를 사용하여 Java 애플리케이션 프로그램을 작성한 예입니다.

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "TestInternal" as
import java.sql.*; 
import java.io.*;

public class POManager
{
   public static void addCustomer (int custNo, String custName, String city) 
   throws SQLException
   {
       String sql = "INSERT INTO Customers VALUES (?,?,?)"; 
       try
       {
         Connection conn = DriverManager.getConnection("jdbc:default:connection:");
       
         PreparedStatement pstmt = conn.prepareStatement(sql); 
         pstmt.setInt(1, custNo);
         pstmt.setString(2, custName); 
         pstmt.setString(3, city); 
         pstmt.executeUpdate(); 
         pstmt.close();
       }
       catch (SQLException e) { 
          System.err.println(e.getMessage());
       }
   }
}

Last updated