오늘은 오전에 오라클로 DB 모델링했던 프로젝트를 발표하였고 오후부터 JDBC 수업을 시작하였다.
수업에 사용하는 jdk와 jre version는 1.8이라 1.8로 지정해주고 인코딩도 UTF-8로 변경한 뒤 수업을 시작하였다!
1. JDBC
1) [J]ava [D]ata [B]ase [C]onnectivity 약자
2) 자바 표준 인터페이스 - DBMS 연동 + 작업(CRUD)
* CRUD? create read update delete..
3) Data Base 연동 기술
2. Java 응용 프로그램 + Oracle DBMS 연동
Java 응용 프로그램 > JDBC(표준 인터페이스) < Oracle DBMS 연동
1) 오라클사에서 JDBC를 구현한 드라이버(driver)가 Oracle Driver이며, 다운을 받아야 한다.
(현재 Oracle 다운받을 때 Driver가 자동으로 받아져서 따로 다운할 필요 X)
2) ojdbc6.jar 파일이 Oracle Driver이다.
3. JDBC Driver? DBMS를 연결할 수 있는 드라이버
- MY SQL -> MY SQL사의 드라이버를 다운 받아야 함.
- MS SQL -> MS사의 드라이버를 다운 받아야 함.
- Oracle -> Oracle 사의 드라이버를 다운 받아야 함.
4. JDBC Driver의 종류
1) Type1 - ODBC Driver (제어판\시스템 및 보안\관리 도구에 있음)
ㄴ 브릿지 사용 연동 / 편리하지만 성능이 떨어짐(중간에 전달받아서 하는 방식)
2) Type2 - Native API Driver
ㄴ C, C++등으로 만들어진 Library로 DB 연동
3) Type3 - 네트워크 프로토콜 Driver
ㄴ 중간에 있는 미들웨어 서버에게 전달하면 DB 작업 처리
4) Type4 - Thin Driver (DBMS 프로토콜 Driver) *****
ㄴ 순수 자바로 만들어졌으며, DBMS를 직접 호출(연결), 가장 많이 사용된다.
5. DBMS 연결(Connection)하는 순서 ***
1) Class.forName() 메서드로 드라이버(JDBC Driver) 로딩
2) DriverManager 클래스의 getConnection() 메서드를 사용해서 Connection 객체를 얻어온다.
어떤 DB서버에 연결할지
어떤 계정에 연결할지
계정 비밀번호
포트
등등
Connection conn = DriverManager.getConnection(서버,ID,PW);
3) 필요한(질의응답) 작업 - CRUD
4) 연결 종료 : Connection 객체 close()
6. Connection 객체를 사용해서 DBMS(Oracle) 연결/닫기
Class.forName("oracle.jdbc.driver.OracleDriver");
- oracle.jdbc.driver : 패키지명
- OracleDriver : 클래스명
연결하기 전에 Oracle SQL Developer를 열고 SCOTT 계정 우클릭 후 속성을 확인
사용자이름, 비밀번호, 호스트이름, 포트, SID 값이 필요하다.
이클립스에서 JDBC를 연동하려고 시도해보니 아래와 같은 에러가 발생하였다.
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
원인은 드리이버를 인식하지 못해서였다.
해결방법은 다양한데 본인은 아래 두 개의 경로에 ojdbc6.jar 파일을 복사 붙여넣기를 하였다.
C:\Program Files\Java\jre1.8.0_321\lib\ext
C:\Program Files\Java\jdk1.8.0_321\jre\lib\ext
위의 방법 말고도 상단의 project에서 properties - Java Build Path에서 Add External JARs...를 누른뒤 ojdbc6.jar 파일을 추가해도 해결이 된다.
드라이버 파일을 추가한 뒤 연동을 해보면 잘 실행이된다!
[드라이버 로딩하는 코딩]
Class.forName("oracle.jdbc.driver.OracleDriver");
[DriverManager를 이용해서 Connection 객체 생성]
String url = "jdbc:oracle:thin:@localhost:1521:xe";
▶ "jdbc:DBMS이름:thin:@호스트이름:포트번호:SID"
String user = "SCOTT";
String password = "tiger";
Connection conn = DriverManager.getConnection(url, user, password);
<Connection의 속성값들>
- DatabaseName : 접속하려는 SQL 서버의 데이터베이스명
- User : 사용자의 이름
- Password : 사용자의 비밀번호
- PortNumber : TCP 포트번호. 기본값은 1443
- ServerName : 연결하려는 SQL 서버가 위치하고 있는 IP 주소
[Connection 닫는 코딩]
conn.close();
<결과>
System.out.println(conn); 코딩으로 콘솔창의 첫번째 값을 가져오고
System.out.println(conn.isClosed()); 코딩으로 Driver가 열렸는지 닫혔는지 Boolean 자료형으로 알려준다.
7. DB 연동 + 필요한 작업(CRUD)
[쿼리들을 실행하는 객체 3가지] -> Connection conn을 사용해서 생성한다.
1) Statement(스테이트먼트)의 의미
- 자바에서 사용되는 3가지 종류의 스테이트먼트들은 데이터베이스로 쿼리를 담아서 보내는 그릇 정도로 생각하면 된다.
- 즉, 스테이트먼트에 쿼리를 실어 데이터베이스로 보내버리면 데이터베이스에서 처리되는 것이다.
- 이 때 한번 사용하고 버리는 그릇은 Statement이며, 재사용 가능한 그릇은 PreparedStatement이다.
2) 종류 3가지
(1) Statement - 기본 객체(하나의 쿼리를 사용하고나면 더이상 사용할 수 없음)
(2) PreparedStatement - 바인딩 변수를 사용해서 쿼리 실행 객체(쿼리를 여러 번 처리 가능)
(3) CallableStatement - 저장 프로시저를 호출해서 쿼리 실행 객체
[dept 테이블의 부서 정보를 조회]
▶ stmt.executeQuery(sql); -> SELECT(DQL 문) 사용할 때 사용
▶ stmt.executeUpdate(sql); -> INSERT, UPDATE, DELETE(DML 문) 사용할 때 사용
▶ rs.next() -> Resultset 안에 읽어오고자 하는 다음 레코드가 있는지 물어보는 함수로 true(있음)/false(없음) 돌려줌
주의! 쿼리문을 복사해서 가져올 경우 쿼리문의 ;은 지워야 한다.
String sql = "SELECT * FROM dept";
각 컬럼에 해당하는 자료형에 맞는 변수를 생성하여야 한다.
컬럼 순서대로 1,2,3 숫자를 줘도 가능하며, 컬럼명을 직접 입력하여도 가능하다.
int deptno = rs.getInt(1);
String dname = rs.getString("dname"); // 2를 줘도 되고, 컬럼명을 줘도 됨
String loc = rs.getString("loc"); // 3을 줘도 되고, 컬럼명을 줘도 됨
<String sql = "SELECT * FROM dept"; 결과>
<String sql = "SELECT * FROM dept WHERE deptno = 90"; 결과>
'TIL > JDBC' 카테고리의 다른 글
[SIST] JDBC_days05_Java에서 트랜잭션 처리와 CallableStatement (0) | 2022.05.10 |
---|---|
[SIST] JDBC_days05_페이징 처리하기 (0) | 2022.05.10 |
[SIST] JDBC_days04 (0) | 2022.05.09 |
[SIST] JDBC_days03 (0) | 2022.05.05 |
[SIST] JDBC_days02 (0) | 2022.05.03 |