- jdbc api
- 실제 수행코드는 정의되어 있지 않다.
- 매소드 호출 방식만 정의해 놨다.
- DB 서버마다 처리하는 방식이 다르다.
- 인터페이스로
- 인터페이스의 자식 클래스를 jdbc driver로 대신하는 것
- 알맹이는 드라이버가 제공
- 공통적인건 class
- 코드는 같은데 driver만 다른거 준비하면 된다.
- 객체 생성을 대신해주는 매소드 (팩토리 매소드)
- 인터페이스 활용이 많이 돋보이는 기술
- executeQuery()
- resultset으로 반환함
- next() 행 단위로 옮겨서 여러 값 추출
- resultset으로 반환함
주요 JDBC API
- statement -> (확장) preparedStatement
- DriverManger
- DB서버에 대한 접속이 선행되어야 한다. drivermanager.getconnection
- jdbc 로딩
Class.forName("com.mysql.cj.jdbc.Driver");
- jdbc url ( Uniform Resource Locator ) -> 위치 알릴 때 단일화
"jdbc:mysql://localhost:3306/sqldb?characterEncoding=UTF-8&serverTimezone=UTC";
- 어떤 DB 서버를 어떤 driver에 연결할지
- jdbc:어떤 서버://[호스트 네임][:port]/dbname[?param1 = value1][¶m2=value2]... → mysql
- user id, passwd 설정
- 실제 연결 DriverManager.getConnection (내부적으로 연결)
Connection conn = DriverManager.getConnection(url, user, passwd);
데이터 읽기
- DriverManager
Class.forName("com.mysql.cj.jdbc.Driver");
- Connection
String url = "jdbc:mysql://localhost:3306/sqldb?characterEncoding=UTF-8&serverTimezone=UTC"; String user = "root"; String passwd = "1234"; Connection conn = DriverManager.getConnection(url, user, passwd);
- Statement
- statement의 팩토리 메소드를 connection이 가지고 있음
- 객체 생성을 대신해주는 일반 메소드: 팩토리 메소드
Statement stmt = conn.createStatement()
- statement 객체를 가지고 올 수 있다.
- ResultSet
- 추출된 데이터 집합을 하나씩 읽어 옴
- ReultSet rs = stmt.excuteQurey("SELECT ename, sal FROM emp);
- resultSet 객체에서 값 들고오기
- next() : 첫번째 값 가르킴
- 최초의 집합에서 0번째 줄 가리키고 있음
- 커넥션 반환하기
- rs.close()
- stmt.close()
- conn.close()
- 다른 프로그램의 connection 요청 못 받을 수도 있음, connection꺼줘야 한다.
package mysql.level1;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SelectEmp {
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
}
catch (ClassNotFoundException cnfe) {
System.out.println("해당 클래스를 찾을 수 없습니다." + cnfe.getMessage());
}
String url = "jdbc:mysql://localhost:3306/sqldb?characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String passwd = "1234";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(url, user, passwd);
stmt = conn.createStatement();
rs = stmt.executeQuery("select ename, sal, hiredate from emp");
while(rs.next()) {
System.out.println(rs.getString("ename") + ","+rs.getDate("hiredate") + "," + rs.getInt("sal"));
}
}catch(SQLException se1) {
System.out.println(se1.getMessage());
}finally { // 생성된 객체 close
try {
if(rs!= null)
rs.close();
if(stmt!= null)
stmt.close();
if(conn != null)
conn.close();
}catch(SQLException se2) {
System.out.println(se2.getMessage());
}
}
}
}
- conn 인터페이스를 구현하고 있는 자식의 객체를 반환한다.
conn = DriverManager.getConnection(url, user, passwd);
- com.mysql.cj.jdbc.ConnectionImpl
- executeQuery
- select 반환 값 DB 서버에 저장소에 들어있음
- 반환값으로 ResultSet 객체 반환
- executeUpdate
- Int 타입 값 반환
- insert, delete, update : 건수 반환
- create, drop : -1반환
- select 구문 제외한 다른거 사용할 때
- Int 타입 값 반환
select절에 나온 값 두 가지로 할 수 있다.
- rs.getString("ename")
- rs.getString(1)
'study > JAVA 전문가' 카테고리의 다른 글
[JDBC] 방명록 (0) | 2021.12.21 |
---|---|
JDBC 2 (0) | 2021.12.21 |
mysql 5 (0) | 2021.12.20 |
mysql 4 - 연습문제 (0) | 2021.12.20 |
Mysql 1 - 연습문제 (0) | 2021.12.18 |