Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

Java 프로그램으로 Oracle 데이터베이스에 이미지 삽입하기: 단계별 완벽 가이드

Oracle 데이터베이스에 이미지를 저장하려면 일반적으로 BLOB(Binary Large Object) 타입을 사용합니다. 따라서 이미지 삽입 작업을 시작하기 전에 아래와 같이 BLOB 타입의 컬럼을 포함한 테이블이 생성되어 있는지 먼저 확인해야 합니다.

Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(255)
IMAGE BLOB

Java 프로그램을 사용하여 Oracle 데이터베이스에 이미지를 삽입하려면 다음 단계를 순서대로 따르면 됩니다.

1단계: 데이터베이스에 연결하기

데이터베이스 연결은 DriverManager 클래스의 getConnection() 메서드를 사용하여 수행할 수 있습니다.

Oracle 데이터베이스에 연결하려면 Oracle URL(Express Edition 기준 jdbc:oracle:thin:@localhost:1521/xe), 사용자 이름, 비밀번호를 getConnection() 메서드의 매개변수로 전달합니다.

String oracleUrl = "jdbc:oracle:thin:@localhost:1521/xe";
Connection con = DriverManager.getConnection(oracleUrl, "user_name", "password");

2단계: PreparedStatement 생성하기

Connection 인터페이스의 prepareStatement() 메서드를 사용하여 PreparedStatement 객체를 생성합니다. 이 메서드에는 플레이스홀더(?)가 포함된 INSERT 쿼리를 매개변수로 전달합니다.

PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyTable VALUES(?, ?)");

3단계: 플레이스홀더에 값 설정하기

PreparedStatement 인터페이스의 setter 메서드를 사용하여 플레이스홀더에 값을 설정합니다. 이때 컬럼의 데이터 타입에 맞는 메서드를 선택해야 합니다. 예를 들어 컬럼이 VARCHAR 타입이면 setString() 메서드를, INT 타입이면 setInt() 메서드를 사용합니다.

BLOB 타입의 경우에는 setBinaryStream() 또는 setBlob() 메서드를 사용하여 값을 설정할 수 있습니다. 이 메서드들에는 매개변수 인덱스를 나타내는 정수 값과 InputStream 클래스의 객체를 매개변수로 전달합니다.

pstmt.setString(1, "sample image");
//BLOB 타입 삽입
InputStream in = new FileInputStream("E:\\images\\cat.jpg");
pstmt.setBlob(2, in);

4단계: 쿼리 실행하기

앞서 생성한 PreparedStatement 객체를 execute() 메서드를 사용하여 실행하면 이미지가 데이터베이스에 정상적으로 삽입됩니다.

전체 예제 코드

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class InsertImageToOracleDB {
    public static void main(String args[]) throws Exception{
        //드라이버 등록
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        //데이터베이스 연결
        String oracleUrl = "jdbc:oracle:thin:@localhost:1521/xe";
        Connection con = DriverManager.getConnection(oracleUrl, "system", "password");
        System.out.println("Oracle 데이터베이스에 연결되었습니다.....");
        PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyTable VALUES(?,?)");
        pstmt.setString(1, "sample image");
        //BLOB 타입 삽입
        InputStream in = new FileInputStream("E:\\images\\cat.jpg");
        pstmt.setBlob(2, in);
        //쿼리 실행
        pstmt.execute();
        System.out.println("레코드가 성공적으로 삽입되었습니다.");
    }
}

실행 결과

Oracle 데이터베이스에 연결되었습니다.....
레코드가 성공적으로 삽입되었습니다.....

위 과정을 통해 Java JDBC를 활용하여 이미지 파일을 Oracle 데이터베이스의 BLOB 컬럼에 손쉽게 저장할 수 있습니다. 실제 운영 환경에서는 파일 경로나 데이터베이스 접속 정보를 하드코딩하지 않고 설정 파일이나 환경 변수로 관리하는 것이 보안상 좋습니다.