JDBC (Java DataBase Connectivity) 프로그래밍
try catch문 안에 작성
- 자바프로그램과 DBMS를 연동, DB에 직접 접근하는 것이 아니라 DBMS(MySQL)와 네트워크로 연결하여 데이터 처리를 요청(Request)하고 결과를 응답(Response) 받는 구조
라이브러리, 자바와 DB를 연결해서 데이터의 입출력 작업을 할 수 있도록 제공
DB에 따라서 드라이버를 설치해 주어야 한다.
작업폴더에 복사해서 붙여 넣기
DriverManager 클래스
JDBC 드라이버를 관리하며 DB와 연결하여 Connection 구현 객체를 생성
(보통 DB는 다른 컴퓨터에 있기 때문에 네트워크로 연결하는데 통로를 연결하는 클래스)
Connection 인터페이스 : 트랜잭션 처리 및 DB 연결을 끊을 때 사용, DB 연결관리자
Statement 인터페이스 : SQL문을 실행하는 역할
ResultSet : DB(표들의 집합)에서 가져온 데이터를 읽는 역할
처리단계
1. DBMS용 드라이버 로드(DriverManager에게 드라이버 전달)
2. 드라이버를 통한 DBMS 접속(IP, 계정, 비밀번호) Connection
3. 요청 및 응답처리 Statement
4. 접속해제(보안) Connection.close
모든 작업은 2~4번을 반복적으로 수행(1번은 프로그램 시작 시 한 번만 수행, 생성자)
드라이버(jar) 파일을 프로젝트 포함 방법(외부 라이브러리)
1. File > Project Struncture 실행
2. Libraries 선택
3. + 버튼 클릭 > Java 선택
4. 포함할 jar 파일의 위치를 찾아서 포함
3th party Libraries : 드라이버 등(하드웨어를 만드는 회사가 만드는 경우가 많다.)(외부 라이브러리)
DBMS 접속용 코드
1. 드라이버 로드 : Class.forName()
DriverManager(DM)에게 드라이버 클래스를 넘기는 코드
클래스 이름을 넣어주면, DriverManager가 해당 클래스를 가지고 드라이버 객체(인스턴스)를 생성하여 사용한다.
2. DBMS와의 접속 수립(처리) : DriverManager.getConnetion()
IP(port), 계정, 비밀번호를 넣어주면 DM이 접속을 처리하고 그 내용을 객체(Connetion)로 만들어 놓는다.
그 객체를 받아서 이후 사용하는 구조.(드라이버 매니저가 만들어준 구조를 사용하는 것)
경로가 정해져 있다.
Connetction 수립 시 작성 내용
1) URL : jdbc:mysql://IP주소:포트번호/저장공간(schemas)
2) 계정 : DB에 설정한 사용자
3) 비밀번호 : 해당 계정의 비밀번호(root 비밀번호 아님!, 사용할 계정 비밀번호 입력)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnectionTest {
public static void main(String[] args) {
Connection conn = null;
// 예외사항 발생 처리
try {
//1. 드라이버 로드 (이름, 경로가 정해져 있음.패키지(소문자)/클래스(대문자))
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("드라이버 로드 성공");
// 2. DBMS(MySQL)에 접속
// jdbc:myqul://(ip주소) 고정
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/dev_db", "dev01", "비밀번호");
System.out.println("접속 성공");
} catch (ClassNotFoundException e) {
//e.printStackTrace();
System.out.println("드라이버 로드 실패");
} catch (SQLException e) {
System.out.println("접속 실패");
} finally {
// 접속 해제
try{
if(conn != null)
conn.close();
System.out.println("접속 해제");
} catch (SQLException e) {
// 아무것도 작성하지 않는다.
}
}
}
}
JDBC용 데이터베이스 설정
1. Workbench에서 root 계정으로 접속
2. 저장공간 생성
3. 새 사용자 계정 생성 및 저장공간 할당(+ 권한 설정)
4. 테스트용 테이블 작성
위에서 작성한 새 사용자 계정으로 작업 진행
import java.sql.*;
public class DatabaseConnectionTest_EX {
public static void main(String[] args) {
Connection conn = null; // 접속객체
Statement stmt = null; //SQL문 실행 객체
ResultSet rs = null; // select 결과 저장 객체
// 예외사항 발생 처리
try {
//1. 드라이버 로드 (이름, 경로가 정해져 있음.패키지(소문자)/클래스(대문자))
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("드라이버 로드 성공");
// 2. DBMS(MySQL)에 접속
// jdbc:myqul://(ip주소) 고정
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jdbc_db", "dbuser", "비밀번호");
System.out.println("접속 성공");
// 실행객체 생성 - Connection
stmt = conn.createStatement();
//SQL 쿼리문 작성
String query = "SELECT * FROM testtb1";
rs = stmt.executeQuery(query);
while (rs.next()){
// 컬럼 갯수 타입 일치시키기
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getInt(3));
System.out.println(rs.getString(4));
}
System.out.println("실행 완료");
} catch (ClassNotFoundException e) {
//e.printStackTrace();
System.out.println("드라이버 로드 실패");
} catch (SQLException e) {
System.out.println("접속 실패");
} finally {
// 접속 해제
try{
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
System.out.println("접속 해제");
} catch (SQLException e) {
// 아무것도 작성하지 않는다.
}
}
}
}
'공부기록' 카테고리의 다른 글
5월 10일 (2) Spring - JSTL 라이브러리 (0) | 2023.05.10 |
---|---|
4월 27일 Java - Lombok, JDBC 2 (0) | 2023.04.27 |
4월 25일 Java - Calendar, File (0) | 2023.04.25 |
4월 24일 Java - StringBuffer, 날짜, 시간처리 (1) | 2023.04.24 |
4월 24일 Java - Collection Framework, Iterator, 기타 객체들 (0) | 2023.04.24 |