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

Java 프로그램으로 MySQL 데이터베이스에 이미지 삽입하는 방법

MySQL 데이터베이스에 이미지를 저장할 때는 일반적으로 BLOB(Binary Large Object) 타입을 사용합니다. 따라서 이미지를 삽입하기 전에 아래와 같이 BLOB 타입의 컬럼을 포함하는 테이블이 미리 준비되어 있어야 합니다.

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| Name  | varchar(255) | YES  |     | NULL    |       |
| image | blob         | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

Java 프로그램을 사용해 MySQL 데이터베이스에 이미지를 삽입하려면 다음 4단계를 순서대로 따르세요.

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

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

MySQL URL인 jdbc:mysql://localhost/sampleDB(여기서 sampleDB는 데이터베이스 이름), 사용자 이름, 비밀번호를 getConnection() 메서드의 매개변수로 전달하여 MySQL 데이터베이스에 연결합니다.

String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "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() 메서드를 사용하여 앞에서 생성한 PreparedStatement 객체를 실행하면 이미지가 데이터베이스에 저장됩니다.

전체 예제 코드

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class InsertImageToMySqlDB {
    public static void main(String args[]) throws Exception {
       // 드라이버 등록
       DriverManager.registerDriver(new com.mysql.jdbc.Driver());
       // 데이터베이스 연결
       String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
       Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
       System.out.println("Connection established......");
       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("Record inserted......");
   }
}

실행 결과

Connection established......
Record inserted......

참고 사항

MySQL Connector/J 8.0 이상 버전을 사용한다면 드라이버 클래스명이 com.mysql.cj.jdbc.Driver로 변경되었으므로 registerDriver() 호출 시 해당 클래스를 사용하는 것이 좋습니다. 또한 JDBC 4.0부터는 드라이버가 자동으로 로딩되기 때문에 별도의 드라이버 등록 과정을 생략할 수도 있습니다. 작업이 끝난 후에는 Connection과 PreparedStatement 객체를 close() 메서드로 닫아 리소스 누수를 방지하고, 가능하다면 try-with-resources 구문을 활용하는 것이 안전합니다.