JDBC (Java DataBase Connectivity)란?
JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API입니다.
JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공해줍니다.
특징
- DBMS 종류에 상관없이 독립적인 JAVA 프로그래밍이 가능합니다.
- JDBC는 아래의 그림과 같이 DBMS에 종속되지 않는 관련 API를 제공하기 때문에 데이터베이스가 달라지더라도 동일한 API를 사용할 수 있습니다.
- DB 벤더에서 JDBC 인터페이스를 자신들의 DB에 맞게 구현하여 라이브러리로 제공하는데, 이것을 JDBC 드라이버 라고합니다.
JDBC API
java.sql (Java Platform SE 8 )
Interface Summary Interface Description Array The mapping in the Java programming language for the SQL type ARRAY. Blob The representation (mapping) in the Java™ programming language of an SQL BLOB value. CallableStatement The interface used to execute
docs.oracle.com
JDBC API에서 제공되는 정보들은 위의 사이트에서 확인할 수 있습니다.
주요 클래스 및 인터페이스
- Connection (interface) : 데이터베이스와 연결을 하기 위해 사용
- DriverManager.getConnection(url, user, password) : DriverManager 클래스를 URL형태의 DB에 접속 요청
- Statement (interface) : SQL문장을 실행하고 그것에 대한 결과 값을 가져오기 위해 사용
- createStatement() : SQL문을 보내기위한 객체 생성
- excuteUpdate() : insert, update, delete
- excuteQuery() : set return
- PreparedStatement (interface) : 동일한 SQL 문장이 여러 번 반복적으로 수행될 때 사용
- prepareStatement(sql) : Statement 보다 향상된 객체
- excuteUpdate() : insert, update, delete
- excuteQuery() : set return
- CallableStatement (interface) : 데이터베이스에 대하여 실제 SQL문을 실행하는 것이 아닌 Stored Procedures를 호출
- ResultSet (interface) : 쿼리에 대한 결과값 처리
- rs.next() : select 결과 가져오기
- 값 받기
- rs.getString(index or label) : string으로 받기
- rs.getInt(index or label) : int로 받기
- rs.getDouble(index or label) : double로 받기
- 아래에서 더 많은 내용 확인 가능합니다.
ResultSet (Java Platform SE 8 )
Retrieves the value of the designated column in the current row of this ResultSet object as a boolean in the Java programming language. If the designated column has a datatype of CHAR or VARCHAR and contains a "0" or has a datatype of BIT, TINYINT, SMALLIN
docs.oracle.com
JDBC 사용하기
1. JDBC 드라이버 로딩
Class.forName(DRIVER_NAME);
Class.forName("com.mysql.cj.jdbc.Driver");
2. Connection 객체 생성
conn = DriverManager.getConnection(url, user, password);
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC", "user", "password");
3. Statement 객체 생성
stmt = conn.createStatement();
4. Query 실행
// SQL문 작성
StringBuilder sql = new StringBuilder("insert into member(userid, username, userpwd) \n");
sql.append("values ('" + id + "','" + name + "','" + pwd + "');");
// Query 실행
stmt.executeUpdate(sql.toString());
5. ResultSet 를 이용하여 데이터 조회
// SQL문 작성
sql = new StringBuilder("select * from member");
// 데이터 조회
rs = stmt.executeQuery(sql.toString());
6. 객체 close
try {
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
전체 예제 코드
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTest {
static Connection conn;
static Statement stmt;
static ResultSet rs;
public JDBCTest() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("Driver Loading Success");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new JDBCTest();
connectionTest();
}
private static void connectionTest() {
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
String user = "ssafy";
String password = "ssafy";
String id = "hong";
String name = "홍길동";
String pwd = "1234";
try {
// DB 객체 생성 및 연결
conn = DriverManager.getConnection(url, user, password);
// Statement 객체 생성
stmt = conn.createStatement();
// SQL문 작성
StringBuilder sql = new StringBuilder("insert into member(userid, username, userpwd) \n");
sql.append("values ('" + id + "','" + name + "','" + pwd + "');");
// Query 실행
stmt.executeUpdate(sql.toString());
// SQL문 작성
sql = new StringBuilder("select * from member");
// Query 실행
rs = stmt.executeQuery(sql.toString());
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
'Java' 카테고리의 다른 글
Java 데이터 타입 (Data Type)과 변수(Variable) (0) | 2023.07.03 |
---|---|
IntelliJ 단축키 정리(Window 기준) (0) | 2023.07.03 |
IntelliJ 설치 (0) | 2023.07.03 |
Java 다운로드 및 설치 - Window (0) | 2023.07.03 |
Java 소개 (0) | 2023.07.03 |