JDBC : JAVA DataBase Connectivity
기존 자바에서는 DB를 조작하기 위해서 JDBC API를 사용했다.
JDBC는 데이터베이스 종류에 상관없이 JDBC만 알면
어떤 데이터베이스를 사용하더라도 일관된 코드로 작성할 수 있다.
JDBC 사용방법
1. JDBC DRIVER 로드 : Driver클래스를 JVM에 로딩
Class.forName(driver);
2. DB 연결 : Driver객체를 다루는 DriverManager를 통해 DB연결
Connection con = DriverManager.getConnection(url, user, password);
3-1. 데이터 삽입
String insertSql = "INSERT INTO member(name, age) VALUES (?,?)";
PreparedStatement pstmt = con.prepareStatement( insertSql ); ①
pstmt.setString(2, "Lisa");
pstmt.setInt(3, 20);
int count = pstmt.executeUpdate(); ②
① PreparedStatement pstmt = con.prepareStatement(String sql);
PreparedStatement는 insert, update, delete 등 동적으로 값을 할당할 때 사용한다.
(동적으로 값을 할당할 수 있게 미리 준비하겠다)
② int count = pstmt.executeUpdate();
insert, update, delete 등은 반환되는 데이터가 없으므로 몇개의 row가 변경되었는지 count수를 반환해준다.
3-2. 데이터 조회
String selectSql = "SELECT * FROM member";
Statement stmt = con.createStatement(); ①
ResultSet rs = stmt.executeQuery( selectSql ); ②
while(rs.next()){ ③
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt(3);
}
① Statement stmt = con.createStatement();
Statement는 select문처럼 정적인 쿼리를 실행할 때 사용한다.
② ResultSet rs = stmt.executeQuery(String sql);
반환되는 데이터를 ResultSet 객체에 담는다. 테이블형식처럼 들어가있다고 생각하자.
③ while(rs.next()){ ~ }
ResultSet은 현재 행을 나타내는 cursor개념이 있고, next() 메소드를 통해 cursor를 다음 행으로 이동시킨다.
반복문 안에서 현재 행의 값을 가져온다.
ResultSet의 칼럼은 0부터가 아닌 1부터 시작한다.
//https://mariadb.org/download/?t=connector&p=connector-java&r=2.7.3&os=source&pkg=java-source-jar&m=yongbok 에서 jar 파일 다운 가능
// 드라이버명과 url은 각 DBMS마다 다르다. 구글에 검색하자
final String driver = "org.mariadb.jdbc.Driver";
// Oracle : oracle.jdbc.driver.OracleDriver
// MySQL : com.mysql.jdbc.Driver
final String url = "jdbc:mariadb://localhost:3306/testdb";
// Oracle : jdbc:oracle:thin:@호스트명:포트번호:SID
// MySQL : jdbc:mysql://호스트명[:포트번호]/데이터베이스명
final String user = "root";
final String password = "1234";
try {
// 1. JDBC DRIVER 로드 : Driver클래스를 JVM에 로딩
Class.forName(driver);
// 2. DB 연결 : Driver객체를 다루는 DriverManager를 통해 DB연결
Connection con = DriverManager.getConnection(url, user, password);
//데이터 삽입
String insertSql = "INSERT INTO member(name, age) VALUES (?,?)";
PreparedStatement pstmt = con.prepareStatement(insertSql);
pstmt.setString(2, "Lisa");
pstmt.setInt(3, 20);
int count = pstmt.executeUpdate();
/* PreparedStatement pstmt = con.prepareStatement(String sql);
PreparedStatement는 insert, update, delete 등 동적으로 값을 할당할 때 사용한다.
(동적으로 값을 할당할 수 있게 미리 준비하겠다)
int count = pstmt.executeUpdate();
insert, update, delete 등은 반환되는 데이터가 없으므로 몇개의 row가 변경되었는지 count수를 반환해준다.
*/
//데이터 조회
String selectSql = "SELECT * FROM member";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(selectSql);
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt(3);
}
/* Statement stmt = con.createStatement();
Statement는 select문처럼 정적인 쿼리를 실행할 때 사용한다.
ResultSet rs = stmt.executeQuery(String sql);
반환되는 데이터를 ResultSet 객체에 담는다. 테이블형식처럼 들어가있다고 생각하자.
while(rs.next()){ ~ }
ResultSet은 현재 행을 나타내는 cursor개념이 있고, next() 메소드를 통해 cursor를 다음 행으로 이동시킨다.
반복문 안에서 현재 행의 값을 가져온다.
ResultSet의 칼럼은 0부터가 아닌 1부터 시작한다.
*/
rs.close();
stmt.close();
pstmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
'💾 Database' 카테고리의 다른 글
[JPA] Java Persistence API 등장배경, 사용방법 (0) | 2022.01.28 |
---|---|
[MyBatis] 동작원리, 사용방법 정리 (0) | 2022.01.27 |
[MyBatis] String을 넘겼을때 Out of range value for column 오류 해결..? (0) | 2022.01.25 |
[MyBatis] 객체 안에 리스트, 1:N 관계 데이터 가져오기 (feat. ResultMap, Association, Collection) (0) | 2022.01.20 |
SQL EXISTS, NOT EXISTS / IN, NOT IN (0) | 2021.11.15 |