D+31 [데이터베이스 프로그래밍 기초]
자바에서는 JDBC API를 이용해서 데이터 베이스 프로그래밍을 하게 된다. 웹 프로그래밍을 하는데 있어 최소한 알아야 하는 JDBC API 사용법을 익혀볼 것이다.
교재에서는 MySQL로 되어 있어서, 오늘 Oracle로 바꾸면서 작업할 것이다!
데이터베이스 & DBMS
- 데이터의 추가/조회/변경/삭제 : 프로그래머가 잘해야 하는 것
- 데이터의 무결성(integrity) 유지
- 트랜잭션 관리
데이터의 백업 및 복원 : 프로그래머X, 데이터관리자O데이터 보안 : 프로그래머X , 데이터관리자O
테이블 & 레코드
주요키 & 인덱스
데이터베이스 프로그래밍
* 일반적 순서
- 연결과 연결 종료 사이에 일어나는 일은 트랜잭션으로 확인할 수 있음
SQL 기초
주요 타입
- 밑줄친 부분이 가장 많이 사용하는 데이터 타입
SQL 타입 | 설명 |
CHAR | 확정 길이의 문자열을 저장. 표준의 경우 255 글자까지만 저장할 수 있다. |
VARCHAR2 | 가변 길이의 문자열을 저장. 표준의 경우 4000 글자(영문기준) 까지만 저장할 수 있다. |
LONG | 긴 가변 길이의 문자열을 저장(2G) |
NUMBER | 숫자를 저장 |
DECIMAL | 십진수를 저장 |
INTEGER | 정수를 저장 |
TIMESTAMP | 날짜 및 시간을 저장 |
TIME | 시간을 저장 |
DATE | 날짜를 저장 |
CLOB | 대량의 문자열 데이터를 저장(4G) |
BLOB | 대량의 바이너리 데이터를 저장(4G) |
테이블 생성 쿼리
* 예시
테이블 조회 쿼리
테이블 조회 쿼리 : 정렬, 집합
- max() - 최대값
- min() - 최소값
- sum() - 합
테이블 수정/ 삭제 쿼리
조인
select A. 칼럼1, A. 칼럼2, B. 칼럼3, B. 칼럼4
from [테이블1] as A, [테이블2] as B
where A.[ 칼럼x] = B.[ 칼럼y]
- 복잡한 인덱스 설계 등을 필요로 함
JDBC의 구조
- 보통 jar 파일 형태로 제공
JDBC 프로그래밍의 코딩 스타일 : 반드시 이클립스에서 SQL내용 출력하기 위해선 SQL에서 commit; 쳐야 한다!
1) JDBC 드라이버 코딩
2) 데이터베이스 커넥션 구함
3) 쿼리 실행을 위한 Statement 객체 생성
4) 쿼리 실행
5) 쿼리 실행 결과 사용
6) Statement 종료
7) 데이터베이스 커넥션 종료
JDBC 드라이버
- Class.forName(“oracle.jdbc.driver.OracleDriver");
- MySQL - com.mysql.jdbc.Driver
- 오라클 - oracle.jdbc.driver.OracleDriver
- MS SQL 서버 - com.microsoft.sqlserver.jdbc.SQLServerDriver
JDBC URL
DB 연결 생성
* DriverManager를 이용해서 Connection 생성
- DriverManager.getConnection(String jdbcURL)
* 일반적인 코드 구성

Statement를 이용한 쿼리 실행
•Connection.createStatement()로 Statement 생성

ResultSet에서 값 조회

ResultSet에서 데이터를 조회하는 코드
* 1개 행 처리 : if로 처리
* 1개 이상 행 처리 : while이나 do-while로 처리하기
rs = stmt.executeQuery(...);
while(rs.next()){
//한 행씩 반복 처리
String name = rs.getString(1);
}
PreparedStatement를 이용한 처리
* SQL의 틀을 미리 정해 놓고, 나중에 값을 지정하는 방식 : '"+name"'"; 이렇게 따옴표질 하기 넘 귀차나서 사용함
* PreparedStatement의 일반적 사용
pstmt = conn.prepareStatement(
"insert into MEMBER (MEMBERID, NAME, EMAIL) values (?, ?, ?)");
pstmt.setString(1, "madvirus"); //첫 번째 물음표의 값 지정
pstmt.setString(2, "최범균"); //두 번째 물음표의 값 지정
pstmt.executeUpdate();
* 쿼리 실행 관련 메서드
- ResultSet executeQuery() : SELECT 쿼리를 실행할 때 사용되며, ResultSet을 결과값으로 리턴
- int executeUpdate() : INSERT, UPDATE, DELETE 쿼리를 실행할 때 사용, 변경된 레코드의 개수를 리턴
PreparedStatement의 값 바인딩 관련 메서드
메서드 | 설명 |
setString(int index, String x) | 지정한 인덱스의 파라미터 값을 x로 지정한다. |
setInt(int index, int x) | 지정한 인덱스의 파라미터 값을 int 값 x로 지정한다. |
setLong(int index, long x) | 지정한 인덱스의 파라미터 값을 long 값 x로 지정한다. |
setDouble(int index, double x) | 지정한 인덱스의 파라미터 값을 double 값 x로 지정한다. |
setFloat(int index, float x) | 지정한 인덱스의 파라미터 값을 float 값 x로 지정한다. |
setTimestamp(int index, Timesetamp x) |
지정한 인덱스의 값을 SQL TIMESTMAP 타입을 나타내는 java.sql.Timestamp 타입으로 지정한다. |
setDate(int index, Date x) | 지정한 인덱스의 값을 SQL DATE 타입을 나타내는 java.sql.Date 타입으로 지정한다. |
setTime(int index, Time x) | 지정한 인덱스의 값을 SQL TIME 타입을 나타내는 java.sql.Time 타입으로 지정한다. |
PreparedStatement의 사용 이유
* 반복해서 실행되는 동일 쿼리의 속도 향상 : DBMS가 PreparedStatement와 관련된 쿼리 파싱 횟수 감소
* 값 변환 처리 : 작은 따옴표 등 값에 포함된 특수 문자 처리
* 코드의 간결함 : 문자열 연결에 따른 코드의 복잡함 감소