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

JDBC PreparedStatement로 MySQL 백슬래시 이스케이프 처리하는 방법

JDBC에서 백슬래시 이스케이프 처리하기

MySQL에 특수 문자나 백슬래시(\)가 포함된 데이터를 안전하게 삽입하려면 PreparedStatement를 사용하는 것이 가장 확실한 방법입니다. PreparedStatement는 SQL 쿼리와 파라미터를 분리해서 전달하기 때문에 백슬래시나 작은따옴표(') 같은 특수 문자를 자동으로 이스케이프 처리해 주며, SQL 인젝션 공격까지 예방할 수 있습니다.

1단계: 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1904
    (
    ClientId int,
    ClientName varchar(20),
    ClientAge int
    );
Query OK, 0 rows affected (0.00 sec)

2단계: Java 코드 작성

PreparedStatement를 사용해 레코드를 삽입하는 Java 코드는 다음과 같습니다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class EscapeBackslashesDemo {
    public static void main(String[] args) {
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/web?" + "useSSL=false", "root", "123456");
            String query = "insert into DemoTable1904(ClientId,ClientName,ClientAge) values(?,?,?) ";
            ps = con.prepareStatement(query);
            ps.setInt(1, 1001);
            ps.setString(2, "David Miller");
            ps.setInt(3, 35);
            ps.executeUpdate();
            System.out.println("One row is inserted.....");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

JDBC PreparedStatement로 MySQL 백슬래시 이스케이프 처리하는 방법

3단계: 저장된 데이터 확인

테이블에 데이터가 정상적으로 삽입되었는지 조회해 보겠습니다.

mysql> select * from DemoTable1904;

실행 결과는 다음과 같습니다.

+----------+--------------+-----------+
| ClientId | ClientName   | ClientAge |
+----------+--------------+-----------+
|     1001 | David Miller |       35 |
+----------+--------------+-----------+
1 row in set (0.00 sec)

핵심 포인트

PreparedStatement의 플레이스홀더(?)에 값을 바인딩하면 JDBC 드라이버가 문자열 내 특수 문자를 자동으로 처리해 줍니다. 따라서 개발자가 백슬래시를 직접 두 번(\\) 입력하거나 수동으로 이스케이프할 필요가 없습니다. 반면 Statement에 문자열을 연결해 쿼리를 만드는 방식은 특수 문자로 인한 구문 오류나 SQL 인젝션 위험을 초래할 수 있으므로, 특수 문자가 포함된 데이터를 다룰 때는 항상 PreparedStatement를 사용하는 것이 권장됩니다.