아래와 같이 테이블을 생성했습니다.
CREATE TABLE TBL_DATA_LOG
(
FLD_DATE CHAR(28) NOT NULL,
FLD_DATA_SIZE INTEGER NOT NULL,
FLD_DATA BIT VARYING(2048) NOT NULL,
FLD_SZ1 INTEGER NOT NULL,
FLD_SZ2 INTEGER NOT NULL,
FLD_SZ3 INTEGER NOT NULL
)
아래와 Java Stored Procedure를 작성했습니다.
import java.util.Date;
import java.text.SimpleDateFormat;
import java.io.ByteArrayInputStream;
import java.sql.*;
public class SP_InsertBinary
{
public static void InsertBinary(int cont_data_size, byte [] cont_data, int sz1, int sz2, int sz3) throws SQLException
{
try
{
String sql = "INSERT INTO TBL_DATA_LOG(FLD_DATE, FLD_DATA_SIZE, FLD_DATA, FLD_SZ1, FLD_SZ2, FLD_SZ3) VALUES (?, ?, ?, ?, ?, ?);";
Class.forName("cubrid.jdbc.driver.CUBRIDDriver");
Connection con = DriverManager.getConnection("jdbc:default:connection:::");
PreparedStatement pstmt = con.prepareStatement(sql);
Date da = new Date();
SimpleDateFormat dt = new SimpleDateFormat("yyyyMMddHHmmss");
String today = dt.format(da);
pstmt.setString(1, today);
pstmt.setInt(2, 10);
ByteArrayInputStream bas = new ByteArrayInputStream(cont_data, 0, cont_data_size);
pstmt.setBinaryStream(3, bas, cont_data_size);
pstmt.setInt(4, sz1);
pstmt.setInt(5, sz2);
pstmt.setInt(6, sz3);
pstmt.executeUpdate();
pstmt.close();
con.close();
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
}
작성한 소스를 컴파일하고, 아래와 같이 클래스를 로드 및 등록했습니다.
loadjava TestDB SP_InsertBinary.class
CREATE PROCEDURE InsertBinary
(
cont_data_size int,
cont_data bit varying,
sz1 int,
sz2 int,
sz3 int
)
as LANGUAGE JAVA
NAME 'SP_InsertBinary.InsertBinary(int, byte[], int, int, int)';
그리고 테스트 해보기 위해 아래와 같이 작성했습니다.
call InsertBinary(5, X'0A1B2C3D4F', 1, 2, 3);
그런데 위와 같이 하면 에러가 발생합니다.
Stored Procedure execute error : java.lang.NullPointerException
아무래도 제가 테스트를 잘못 하는 듯 싶은데 왜 저런 에러가 발생할까요?
그리고 loadjava 명령으로 로드한 클래스를 언로드 하는 방법이 있나요?