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

Java PreparedStatement로 MySQL 테이블에 레코드 삽입하는 방법

Java에서 PreparedStatement를 사용해 MySQL 테이블에 레코드를 삽입하려면 아래와 같은 문법을 사용합니다. SQL 인젝션 공격을 방지하고 쿼리 성능을 향상시킬 수 있어 실무에서 널리 활용되는 방식입니다.

1. INSERT 쿼리 작성하기

먼저 INSERT 문을 문자열로 작성합니다. 값이 들어갈 자리는 물음표(?) 플레이스홀더로 표시합니다.

String anyVariableName = "INSERT INTO yourTableName(yourColumnName1, yourColumnName2, yourColumnName3, .........N)" +
"VALUES (?, ?, ?, ..............N)";

2. PreparedStatement로 값 설정하기

다음으로 PreparedStatement 객체를 생성하고, 각 컬럼에 해당하는 값을 setXXX() 메서드로 설정합니다. 데이터 타입에 따라 setInt(), setString(), setDate() 등의 메서드를 선택하면 됩니다.

PreparedstatementObject = con.prepareStatement(query);
PreparedstatementObject.setXXX(1, yourValue);
PreparedstatementObject.setXXX(2, yourValue);
PreparedstatementObject.setXXX(3, yourValue);
.
.
N

3. MySQL 테이블 생성하기

예제 진행에 앞서 MySQL에서 샘플 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 CourseDemo 테이블을 생성합니다.

mysql> create table CourseDemo
-> (
-> CourseId int,
-> StudentName varchar(20),
-> CourseName varchar(30)
-> );
Query OK, 0 rows affected (1.86 sec)

4. Java 전체 코드 예제

아래는 PreparedStatement를 활용해 사용자 입력값을 받아 테이블에 레코드를 삽입하는 완전한 Java 코드입니다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Scanner;
public class InsertRecordInPreparedStatement {
    static int cid;
    static String studentName;
    static String courseName;
    public static void main(String[] args) {
        String JdbcURL = "jdbc:mysql://localhost:3306/sample?useSSL=false";
        String Username = "root";
        String password = "123456";
        Connection con = null;
        Scanner keyboardInput=new Scanner(System.in);
        PreparedStatement pstmt = null;
        String query = "INSERT INTO CourseDemo(CourseId, StudentName, CourseName)" + "VALUES (?, ?, ?)";
        try {
            con = DriverManager.getConnection(JdbcURL, Username, password);
            input(keyboardInput);
            pstmt = con.prepareStatement(query);
            pstmt.setInt(1, cid);
            pstmt.setString(2, studentName);
            pstmt.setString(3, courseName);
            int status = pstmt.executeUpdate();
            if(status > 0) {
                System.out.println("Record is inserted successfully !!!");
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void input(Scanner keyboardInput) {
        System.out.println("Enter the course id:");
        cid = keyboardInput.nextInt();
        System.out.println("Enter the Student Name:");
        studentName = keyboardInput.next();
        System.out.println("Enter the Course Name:");
        courseName = keyboardInput.next();
    }
}

실행 결과

위 코드를 실행하면 콘솔에서 과목 ID, 학생 이름, 과목 이름을 순서대로 입력받고, 정상적으로 처리되면 성공 메시지가 출력됩니다.

Enter the course id:
101
Enter the Student Name:
John
Enter the Course Name:
Java
Record is inserted successfully !!!

5. 데이터 삽입 결과 확인하기

레코드가 실제로 테이블에 저장되었는지 확인하려면 MySQL에서 sample 데이터베이스를 선택한 뒤 SELECT 문으로 조회합니다.

mysql> select *from CourseDemo;

조회 결과는 다음과 같습니다.

+----------+-------------+------------+
| CourseId | StudentName | CourseName |
+----------+-------------+------------+
| 101      | John        | Java       |
+----------+-------------+------------+
1 row in set (0.00 sec)

이처럼 PreparedStatement를 사용하면 값이 자동으로 이스케이프 처리되어 SQL 인젝션 위험 없이 안전하게 데이터를 삽입할 수 있습니다. 또한 동일한 쿼리를 반복 실행할 때 컴파일된 상태가 재사용되므로 성능 면에서도 유리합니다.