class_27.sql
class_jdbc -->> src -->> ch02
DriverManager를 이용한 연결
DriverManager 클래스는 JDBC 드라이버를 관리하고 데이터베이스와의 연결을 설정하는 데 사용됩니다.
- 드라이버 로드:
- 먼저 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 쿼리를 실행하고 트랜잭션을 관리하는 데 사용됩니다.
- SQL 쿼리 실행 준비:
- Connection 객체를 사용하여 SQL 쿼리를 실행할 Statement, PreparedStatement 객체를 생성할 수 있습니다
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
- 트랜잭션 관리
- Connection 객체를 사용하여 트랜잭션을 수동으로 관리할 수 있습니다 (작업 단위)
connection.setAutoCommit(false); // 자동 커밋 비활성화
- 연결 닫기
- 작업이 끝난 후에는 Connection 객체를 닫아야 합니다
connection.close();
SQL 쿼리 실행
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);
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) {
// 준비물
// mydb2 --> 데이터베이스 이름
// serverTimezone --> 아시아/ 서울 시간으로 사용
String url = "jdbc:mysql://localhost:3306/mydb2?serverTimezone=Asia/Seoul";
String user = "root"; // 상용서비스에서 절대 root 계정으로 사용 금지
String password = "asd123";
// 필요 데이터 타입
// JDBC API의 레벨(자바 개발자들이 개념화 시켜놓은 클래스들 이다.)
Connection connection = null; // 연결을 관리하는 데이터타입
Statement statement = null; // 문자열 기반으로 쿼리를 실행시킨다.
ResultSet resultSet = null; // 결과를 받는다.
// 1. MySQL 구현체를 사용하겠다는 설정을 해야한다.
// JDBC 드라이버 로드 (MySQL 드라이버)
try {
// 1. 메모리에 사용하는 드라이버(JDB 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("rountCount : " + rowCount);
} catch (ClassNotFoundException e) { // ClassNotFoundException : 클래스를 못찾았을 때
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} // end of main
} // end of class
'Java' 카테고리의 다른 글
| 2024.06.12 Java 유용한 클래스 래퍼 클래스 (Wrapper class) (0) | 2024.06.12 |
|---|---|
| 2024.06.11 Data Structure(자료구조) JDBC 데이터 기본 조작(CRUD) (0) | 2024.06.11 |
| 2024.06.11 Data Structure(자료구조) JDBC 설치 및 설정 (0) | 2024.06.11 |
| 2024.06.10 Data Structure(자료구조) JDBC 구성 요소(아키텍처) 및 mysql 파일 다운로드 및 적용 (0) | 2024.06.10 |
| 2024.06.10 Data Structure(자료구조) JDBC란 뭘까? (0) | 2024.06.10 |