728x90
반응형
아래는 PreparedStatement
를 이용해 데이터베이스에 데이터를 삽입하고 조회하는 예제 코드입니다. 이 예제에서는 insertUser
메서드를 통해 데이터를 삽입한 뒤, getUserByEmail
메서드를 통해 특정 이메일을 기준으로 데이터를 조회합니다.
1. 테이블 구조
이 예제는 앞서 생성한 users
테이블을 사용합니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL
);
2. Java PreparedStatement 예제 코드 (INSERT 및 SELECT)
insertUser
메서드는 사용자를 테이블에 삽입하고, getUserByEmail
메서드는 주어진 이메일로 사용자를 조회하여 결과를 출력합니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PreparedStatementExample {
// 데이터베이스 연결 정보
private static final String URL = "jdbc:mysql://localhost:3306/your_database";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static void main(String[] args) {
String name = "John Doe";
String email = "john.doe@example.com";
insertUser(name, email);
getUserByEmail(email);
}
// 사용자 정보를 삽입하는 메서드
public static void insertUser(String name, String email) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// ?에 값 바인딩
pstmt.setString(1, name);
pstmt.setString(2, email);
// 실행 및 결과 확인
int rowsInserted = pstmt.executeUpdate();
if (rowsInserted > 0) {
System.out.println("새로운 사용자가 성공적으로 추가되었습니다!");
}
} catch (SQLException e) {
System.out.println("데이터 삽입 오류: " + e.getMessage());
}
}
// 이메일로 사용자를 조회하는 메서드
public static void getUserByEmail(String email) {
String sql = "SELECT id, name, email FROM users WHERE email = ?";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// ?에 값 바인딩
pstmt.setString(1, email);
// 쿼리 실행 및 결과 가져오기
ResultSet rs = pstmt.executeQuery();
// 결과 출력
if (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String emailRetrieved = rs.getString("email");
System.out.println("조회된 사용자:");
System.out.println("ID: " + id);
System.out.println("이름: " + name);
System.out.println("이메일: " + emailRetrieved);
} else {
System.out.println("해당 이메일로 사용자를 찾을 수 없습니다.");
}
} catch (SQLException e) {
System.out.println("데이터 조회 오류: " + e.getMessage());
}
}
}
3. 코드 설명
insertUser
메서드:- 사용자의
name
과email
을users
테이블에 삽입합니다. PreparedStatement
의setString
메서드를 사용해?
자리마다 값을 바인딩하여 안전하게 SQL 쿼리를 실행합니다.
- 사용자의
getUserByEmail
메서드:- 주어진 이메일을 기준으로
users
테이블에서 데이터를 조회합니다. pstmt.executeQuery()
를 사용해ResultSet
객체에 결과를 저장하고,rs.next()
를 호출해 결과가 있는지 확인한 후 데이터를 추출하여 출력합니다.
- 주어진 이메일을 기준으로
- try-with-resources:
Connection
,PreparedStatement
,ResultSet
객체는 try-with-resources 블록을 사용해 자동으로 닫히도록 설정했습니다.
4. 실행 결과
예제를 실행하면 사용자를 삽입하고, 해당 이메일로 사용자를 조회하는 결과가 출력됩니다.
새로운 사용자가 성공적으로 추가되었습니다!
조회된 사용자:
ID: 1
이름: John Doe
이메일: john.doe@example.com
주의 사항
- 실제 데이터베이스 연결 정보(
URL
,USER
,PASSWORD
)는 본인의 환경에 맞게 수정해야 합니다. - 이 예제는 SQL 인젝션을 방지하는
PreparedStatement
의 장점을 잘 보여줍니다. 입력값을 쿼리에 직접 추가하지 않고setString
메서드를 통해 값이 바인딩되므로 보안적으로 안전한 코드를 작성할 수 있습니다.
이 코드는 PreparedStatement
를 사용해 SQL 삽입 및 조회 작업을 안전하고 효율적으로 수행하는 방법을 학습하는 데 도움이 될 것입니다.
728x90
반응형
'Topcit' 카테고리의 다른 글
이진 트리 순회 방식 (1) | 2024.11.10 |
---|---|
클래스 다이어그램 (1) | 2024.11.09 |
Java 객체지향 프로그래밍 특징 (0) | 2024.10.28 |
SQL DCL 요약 (0) | 2024.10.28 |
SQL DML 요약 (1) | 2024.10.27 |