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 애플리케이션 프로그램을 개발 시 아래의 두 가지 사항을 주의합니다.
정적(static) 전역 변수를 사용할 수 없으며, 사용할 경우 예상치 못한 오동작이 발생할 수 있습니다.
사용자 Java 클래스를 PSM 함수로 대응시키기 위해서는 반드시 정적 함수로 선언해야 합니다.
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>
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