JDBC란 무엇인가?
- JDBC : Java DataBase Connectivity
- Java에서 DB 프로그래밍을 하기 위해 사용되는 API
- DB 종류에 상관없다.
- 드라이버 로드하기
- 연결 생성하기
- 문장 실행하기
- 결과집합 사용하기
JDBC를 이용하는 자바 코드
- Class.forName("oracle.jdbc.driver.OracleDriver")
- Connection con = DriverManager.getConnection(...);
- 연결이 실행되고 연결이되면 Connection 객체가 생성
- Statement st = con.createStatement();
- ResultSet rs = st.executeQuery(sql);
- 결과집합이 한꺼번에 넘어오는 것이 아닌 결과집합을 사용할 수 있는 상태가 된다.
- Before of File(BoF) / End of File(EoF)
- rs.next();
- 데이터 패치
- 4번 과정에서 생긴 커서가 다음 레코드로 이동한다.
- String title = rs.getString("title");
간단한 실습
String url = "jdbc:oracle:thin:@localhost:1521/xepdb1";
String sql = "SELECT * FROM NOTICE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "newlec", "****");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
rs.next();
String name = rs.getString("TITLE");
System.out.printf("NAME:%s\n", name);
rs.close();
st.close();
con.close();
<주의사항>
- 오타를 진~짜 조심하자...
- 포트번호가 1521인데 1512로 해놓고 이틀동안 찾지 못하여 엄청 해맸다...
간단한 실습2
while(rs.next()) {
int id=rs.getInt("ID");
String title = rs.getString("TITLE");
String writedId = rs.getString("WRITER_ID");
String content = rs.getString("CONTENT");
Date regDate = rs.getDate("REGATE");
int hit = rs.getInt("HIT");
System.out.printf("id: %d, title: %s, writerid: %s, regDate: %s, content: %s, "
+ "hit: %d\n", id, title, writedId, regDate, content, hit);
}
간단한 실습3
- 특정 데이터에서 조건에 맞는 ROW만 출력
- 나는 while문 내에서 조건문을 달았는데 이는 잘못된 것이였다.
- 조건은 SQL문에서 WHERE절로 처리를 했어야했다. 이를 명심하자
- 데이터 필터링, 정렬, 그룹화, 등의 모든 데이터 연산은 데이터베이스에서 처리한다.
- 자바는 UI 레이아웃만 처리
- 데이터 가공처리는 SQL이 처리
트랜잭션 처리
트랜잭션이란?
- 하나의 단위로 수행되길 바라는 쿼리의 묶음(=업무 수행단위, 논리적인 수행단위)
- 트랜잭션 처리란?
- ACID를 유지하는 것
- Automaticity(원자성), Consistency(일관성), Isolation(고립성), Durability(영속성)
- 원자성 : 모든 트랜잭션이 성공 또는 실패
- 일관성 : 트랜잭션이 완료되어도 DB의 고유 속성은 유지
- 고립성 : 하나의 트랜잭션이 작동할 때 다른 트랜잭션이 개입을 할 수 없다.
- 영속성 : DB에 영속적으로 저장되어야한다.
1~8강