본문으로 바로가기

JDBC 기본 사용법 - 4

category Java 2024. 11. 12. 11:26

DriverManager를 이용한 연결

DriverManager 클래스는 JDBC 드라이버를 관리하고 데이터베이스와의 연결을 설정하는 데 사용됩니다.

  1. 드라이버 로드:
    • 먼저 JDBC 드라이버를 메모리에 로드합니다.
    try {
        Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 드라이버 로드
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    

데이터베이스 연결

  • DriverManager.getConnection() 메소드를 사용하여 데이터베이스와의 연결을 설정합니다.
  • 예제 코드
String url = "jdbc:mysql://localhost:3306/mydatabase?serverTimezone=Asia/Seoul";
String user = "root";
String password = "mypassword";

try {
    Connection connection = DriverManager.getConnection(url, user, password);
    System.out.println("MySQL 데이터베이스에 성공적으로 연결되었습니다!");
} catch (SQLException e) {
    e.printStackTrace();
}

Connection 객체 사용법

Connection 객체는 데이터베이스와의 연결을 나타내며, SQL 쿼리를 실행하고 트랜잭션을 관리하는 데 사용됩니다.

  1. SQL 쿼리 실행 준비:
    • Connection 객체를 사용하여 SQL 쿼리를 실행할 Statement, PreparedStatement 객체를 생성할 수 있습니다
    Connection connection = DriverManager.getConnection(url, user, password);
    Statement statement = connection.createStatement();
    
  2. 트랜잭션 관리
    • Connection 객체를 사용하여 트랜잭션을 수동으로 관리할 수 있습니다.
    connection.setAutoCommit(false); // 자동 커밋 비활성화
    
  3. 연결 닫기
    • 작업이 끝난 후에는 Connection 객체를 닫아야 합니다.
    connection.close();
    

SQL 쿼리 실행

  1. Statement 객체 사용SQL 쿼리 실행:
    • executeQuery() 메소드: SELECT 쿼리를 실행하고 결과를 반환합니다.
    • executeUpdate() 메소드: INSERT, UPDATE, DELETE 쿼리를 실행하고 영향을 받은 행의 수를 반환합니다.
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
    
    while (resultSet.next()) {
        System.out.println("User ID: " + resultSet.getInt("id"));
        System.out.println("User Name: " + resultSet.getString("name"));
    }
    
    int rowsAffected = statement.executeUpdate("INSERT INTO users (name) VALUES ('John Doe')");
    System.out.println("Rows affected: " + rowsAffected);
    
  2. Statement 객체는 SQL 쿼리를 실행하고 결과를 받아오는 데 사용됩니다.
  3. PreparedStatement 객체 사용SQL 쿼리 준비 및 실행
    • setXXX() 메소드를 사용하여 파라미터를 설정합니다.
    String sql = "INSERT INTO users (name) VALUES (?)";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
    preparedStatement.setString(1, "John Doe");
    int rowsAffected = preparedStatement.executeUpdate();
    System.out.println("Rows affected: " + rowsAffected);
    
    sql = "SELECT * FROM users WHERE id = ?";
    preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setInt(1, 1);
    ResultSet resultSet = preparedStatement.executeQuery();
    while (resultSet.next()) {
        System.out.println("User ID: " + resultSet.getInt("id"));
        System.out.println("User Name: " + resultSet.getString("name"));
    }
    
    
  4. PreparedStatement 객체는 미리 컴파일된 SQL 문을 실행하는 데 사용됩니다. 이는 성능을 향상시키고 SQL 인젝션 공격을 방지하는 데 도움이 됩니다.

기존 코드

package ch02;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MySQLJdbcExample {

	public static void main(String[] args) {
		
		// 준비물 
		String url = "jdbc:mysql://localhost:3306/mydb2?serverTimezone=Asia/Seoul";
		String user = "root"; // 상용서비스에서 절대 루트 계정 사용 금지
		String password = "asd123";
		
		// 필요 데이터 타입 
		// JDBC API 레벨(자바 개발자들이 개념화 시켜 놓은 클래스들이다. )
		Connection connection = null;
		Statement statement = null; 
		ResultSet resultSet = null; 
		
		// 1. MySQL 구현체를 사용하겠다는 설정을 해야 한다. 
		// JDBC 드라이버 로드(MySQL 드라이버)   
		
		try {
			// 1. 메모리에 사용하는 드라이버(JDBC API를 구현한 클래스) 클래스를 띄운다. 
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			// 2. 데이터 베이스 연결 설정 
			connection = DriverManager.getConnection(url, user, password);
			
			// 3. SQL 실행 
			statement = connection.createStatement();
			// 딱 2가지는 기억하지! 쿼리를 실행 시키는 메서드 
			resultSet  = statement.executeQuery("SELECT * FROM employee"); // select 실행시 사용한다. 
			// statement.executeUpdate(password); --> Insert, Update, delete 사용
			
			// 구문 분석 -- 파싱 
			
			// 4. 결과 처리 
			while(resultSet.next()) {
				System.out.println("USER ID : " + resultSet.getInt("id"));
				System.out.println("USER NAME : " + resultSet.getString("name"));
				System.out.println("department : " + resultSet.getString("department"));
				System.out.println("----------------------------------");
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		

	} // end of main 

} // end of class

코드 수정 - PreparedStatement 에 사용

'Java' 카테고리의 다른 글

람다식(Lambda expression)  (1) 2025.01.04
래퍼 클래스  (0) 2025.01.04
JDBC 설치 및 설정 - 3  (1) 2024.11.12
JDBC 구성 요소(아키텍처) - 2  (0) 2024.11.11
인터페이스 활용  (0) 2024.10.02