20230824 (목)
<복습>
1. JDBC 프로그램
- ROWNUM
- TOP-N 문제
- BETWEEN AND
- View
- SEQUENCE
* 유저 정보 테이블 - 유일성 보장해줌.
* 첨부파일 관리, 게시판 관리
* 순차번호를 배정해서 프라이머리키로 씀.
* 번호표를 발급
* 시작값, 증가값, 최대값 설정 가능함
* xxx.nextval
주로 insert문 호출 시 id부분에 배정함.
MySQL, MSSQL에서는
id, integer, primary key를 배정할 때 제약조건 걸듯이 속성을 지정하는데,
auto_increment를 통해서 자동으로 1 증가된 값이 배정된다.
2. 우리가 구축한 DB를 자바와 연동하는 프로그램 작성
Java에서는 1벌만 작성 -> JDBC Driver에서 어떤 DB랑 연동할 것인지를 선택함.
추상클래스/인터페이스로 코딩하면 실제 프로그램이 뭐인지와는 관계 없이 프로그램 구현 가능함.
3. Connection
- 접속, 세션관리 트랜잭션
4. SQL실행
- Statement
- PreparedStatement : 속도면에서 더 빠름.
- SQL문 -> DBMS
- SQL문이 어떤것이냐에 따라서 작업이 달라짐
* 읽기 : SELECT(리턴 - 테이블(다중데이터))
* 수정 : INSERT, UPDATE, DELETE -> 정수 : 영향받은 행의 갯수
SELECT : executeQuery() -> ResultSet
next()가 반환됐을 때 false가 반환됐으면 데이터가 없다고 봐도 됨.
while(rs.next()) { ... }
처음부터 데이터가 없을 수도 있음. -> while문을 처음부터 돌지 않을 수도 있음. -> 정상적인 실행 과정임.
만약에 where 절에 대한 검색이 pk컬럼에 대한거라면 1개 있거나, 없거나 둘 중 하나이다.
- insert, update, delete : 이 3가지 쿼리는 executeUpdate()를 통해서 업데이트가 됨.
return 값이 0이라고 해서 실패했다고 보면 안됨. => where 조건에 따른 데이터가 없다고 봐야 함.
진짜 에러는 제약조건 위배의 경우이다. => 이럴 경우에 예외가 발생함. (ORA-xxx...)
- VO (Value Object) :
* 만드는 법 - 테이블 설계, 테이블의 이름이 class이름이 됨. 컬럼명은 변수, 컬럼타입은 변수의 타입이 됨.
* VO의 인스턴스가 이 테이블에서는 행 데이터가 됨.
* VO를 정의하면 테이블을 자동으로 정의해주는 프로그램 : JPA 라이브러리를 사용하면 가능함. (ORM 이라고 부름)
<오늘 수업>
1. Compile이란?
- 하나의 언어를 파일로 번역시킬때 쓰이는 프로그램. (.java -> .class)
- 특정 소스 하나를 번역해서 기계어로 번역하는 일 = 컴파일
- 전체 파일을 번역한다 = 빌드
- 통합 Build 툴
* Maven - 이클립스와 친화적 (우리가 쓸 것, 라이브러리도 Maven으로~)
* Gradle - 인텔리제이와 친화적
2. JUnit
1. 단정문
- assertArrayEquals(expected, actual, message)
- assertEquals(expected, actual, message)
- assertSame(expected, actual, message)
- assertTrue(actual, message)
- assertNotNull(actual, message)
<<UserDAO>> 인터페이스
↑
UserDaoImpl
<.nextLine() 에러>
==> 버퍼때문임.
자동으로 엔터가 되는 문제 해결
sc.nextLine(); // 엔터제거용
위의 코드 추가하기..!
select 결과 처리 -> ResultSet
<3Tier 구조>
- Data 계층
- Buisness 계층
- Presention 계층
==> 우리는 Impl 로나눴지만... CLI에서는 경계가 모호함.
3. Statement로 Insert문 실행
String sql = "INSERT INTO USER"