Java

JDBC 기본 사용법

ryeonng 2024. 6. 14. 16:34

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 객체 사용

Statement 객체는 SQL 쿼리를 실행하고 결과를 받아오는 데 사용된다.

 

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. PreparedStatement 객체 사용

PreparedStatement 객체는 미리 컴파일 된 SQL 문을 실행하는데 사용된다. 이는 성능을 향상 시키고, SQL 인젝션 공격을 방지하는 데 도움된다.

 

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"));
}

 

package ch02;

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

public class MySQLJdbcExample {

	public static void main(String[] args) {

		// jdbc connect 준비물 
		//
		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 실행 (PreparedStatement 객체 사용해보기)
			
			// 3-1 쿼리 만들어 보기
			String query = "insert into employee values(?, ?, ?, ?, now())";
			
			PreparedStatement preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, 7);
			preparedStatement.setString(2, "이순신");
			preparedStatement.setString(3, "IT");
			preparedStatement.setString(4, "5000000.00");
			
			// 실행의 호출은 executeQuery 에 사용
			int rowCount = preparedStatement.executeUpdate();
			System.out.println("rowCount : " + rowCount);
			
			// 4. 결과 처리
			
				
			
			
		} catch (ClassNotFoundException e) {
		
			e.printStackTrace();
		} catch (SQLException e) {

			e.printStackTrace();
		}
		
		
	} // end of main

} // end of class