일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 매일 타자연습
- tuple
- 유스케이스 다이어그램
- 데이터베이스 접속
- SQL Developer
- python 기초
- CSV
- Oracle 18c
- 카카오 오븐
- MySQL
- oracle 11g
- Set
- ORA-1017
- Python
- 10fastfingers.com
- Java
- Usecase Diagram
- The Network Adapter could not establish the connection
- 자바
- 카카오맵
- Oracle 오류
- oracle
- database
- typing test
- SQL
- SEQUENCE
- 카카오맵 API
- Kakao 지도 API
- Kakao Oven
- Jupyter Notebook
- Today
- Total
Another Brain
22일차 (6월 16일)_ JDBC Programming - R = select 본문
## JDBC (Java DataBase Connectivity)
-- JDBC = Java + Database(SQL) 연결 위한 표준 api
-- 회원관리시스템 : MEMBER 테이블
-- Pattern Programming
>> DTO Pattern
>> Dao Pattern
>> Singleton Pattern
>> Factory Pattern
-- 자바 : MemberService.java
>> 회원 관리를 위한 서비스 제공하는 기능
>> 사용할 SQL 구문
>> 내일 수업시에 완전 여유있게 수업참여가능
## 개발환경 환경설정
1. DBMS : oracle 설치
2. JDBC api :
=> 자바에서 제공한 표준 api
=> java se 포함 (rt.jar => java.sql.*, javax.sql.*)
3. JDBC driver :
=> db vendor가 구현해서 제공하는 구현물
=> oracle : ojdbc6.jar
=> 복사위치 : %java_home%\jre\lib\ext> ojdbc6.jar (공통 lib 위치)
## JDBC API
-- java.sql.*;
-- DriverManager
-- Connection
-- Statement / PreparedStatement / CallableStatement
-- ResultSet
## JDBC 프로그래밍 기본절차
1. 드라이버 로딩
2. DB 서버연결
3. SQL 통로개설
4. SQL수행요청
5. 결과처리
6. 자원해제
## JDBC Resource property
## Oracle
1. String driver = "oracle.jdbc.driver.OracleDriver";
2. String url = "jdbc:oracle:thin:@localhost:1521:XE";
3. String user = "scott";
4. String password = "tiger";
## JDBC 기본 예제
// 1. 드라이버 로딩
Class.forName(driver);
// 2. DB 서버연결
Connection conn = DriverManager.getConnection(url, user, password);
// 3-1. SQL 통로개설 : 동적 SQL 수행
Statement stmt = conn.createStatement();
// 4-1. SQL수행요청
ResultSet rs = stmt.executeQuery("select * from dept");
// 3-2. SQL 통로개설 : 정적 SQL 수행
PreparedStatement stmt = conn.preparetatement("select * from dept where dname=?");
stmt.setString(1, dname);
// 4-2. SQL수행요청
ResultSet rs = stmt.executeQuery();
// 5. 결과처리
while(rs.next()) {
int deptno = rs.getInt("deptno");
String dname = rs.getString("dname");
String loc = rs.getString("loc");
}
// 6. 자원해제
rs.close();
stmt.close();
conn.close();
## 예외처리
1. SQLException : dbms
2. ClassNotFoundException : jdbc driver loading
## SQL 통로
-- Statement
=> 동적 SQL 수행
=> sql 구문오류 실행시(runtime) 발생
=> sql '문자열' 변환 번거로움
=> "sql수행문" n/w traffic 증가
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.executeQuery(sql); >>
-- PreparedStatement ***
=> 전용통로 장점 : n/w 트래픽 감소,
=> 정적 SQL 수행 : sql 전용통로 , sql문자열 자동변환, 보안(SQL INJECTION)
String sql = "insert into dept values(?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
// ? 기호에 매핑되는 값을 설정해서 sql 통로 완성
// setXxx(index, 값) : index는 ?의 위치, 시작은 1번부터
// setString(1, 변수명) => 문자열 => 'sql문자열' 변환
pstmt.setInt(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
// 전용통로이기때문에 실행시 sql 구문을 지정해서는 안됨(주의)
pstmt.executeUpdate();
-- CallableStatement
=> Stored function, Stored procedure 호출 사용 통로
=> PL/SQL
## SQL 수행요청 메서드
-- R : executeQuery(sql) : ResultSet
-- CUD : executeUpdate(sql) : int
-- 기타 : execute(sql) : boolean
## ResultSet API
-- select 수행결과 객체
-- select 결과 유무 및 해당레코드 커서 이동 : next()
-- 해당레코드 컬럼데이터 가져오기 :
=> getXxx(select컬럼인덱스번호) : xxx타입
=> getXxx("select컬럼명") : xxx타입
=> xxx : getString(), getInt(), getDate() 등
♬TIP
## 기본 JAVA PROJECT 설정 >> 파일 "JAVA WorkSpace 환경설정" 에 저장
'P > SQL' 카테고리의 다른 글
[Oracle] ORA-01031: insufficient privileges 오류 해결 (0) | 2021.08.27 |
---|---|
23일차(6월 18일)_ JDBC Programming 2 , Pattern (0) | 2021.06.18 |
SQL mission 2 (0) | 2021.06.16 |
21일차(6월 16일)_ TCL, JOIN, 집합연산자, VIWE (0) | 2021.06.16 |
20일차(6월 15일)_ DDL, DML (0) | 2021.06.15 |