코딩 학원 22일차 (Java + Oracle DB)
보통 학원의 경우 딱 DB프로그래머 영역의 CRUD 까지만 수업을 한단다. 그런데
DBA
---------------- 우리는 살짝 선을 넘은
DBP : CRUD
-----------------
DBC
그런 상황이라고 하셨다.
CRUD에서 C의 의미가 create table이 아니고 insert into 그러니까 필드에 값을 넣는 것이고 테이블 생성은 사실 DBA가 하는 거지 우리가 하는것은 아니다 그러니까 제발 Java로 테이블 어떻게 만드는지 물어보지 말란다
(오늘 수업 끝나고 보는 필기 내용인데 테이블 만드는 방법이 더욱 더 궁금해졌다.)
Java + DB 시작전에 몸풀기로 어제 했던 것들 비슷하게 한번 더 하자 하셨다.
마리오 아울렛 홈페이지에서 층별안내도를 테이블로 만들잖다.
1관, 1층, 여성/핸드백/TD/맥도날드, 루이까또즈, 02-111-1234, 2022-01-01 입점, 티셔츠, 10000
2관, 2층, 골프웨어, 데상트 골프, 02-123-4444, 2011-03입점, 골프화, 300000
이런거 표현할 수 있게
이렇게 테이블 두개 만들면 될듯 했는데
3개로 변경 그리고 쓰다보니까 마리오 아울렛 하자 해놓고 그냥 내가 자주 가는 백화점 처럼 만들어 버렸다.
문제풀기
이제 자바로 와서 db서버랑 연결됬다면 - 성공, 안 됬으면 - 실패가 뜨는 프로그램 만들라고 하셨다.
통신에는 실시간이 있고 요청-응답 하는 것이 있다.
soket이 실시간, http가 요청-응답 그럼 http에 더 가까우니 이건가? 라는 생각이 들었으면 좋겠다고 하셨다.
근데 그냥 DB서버와 통신하는게 따로 있는데 자바에 이런건 없다.
그러니까 만들어 써라..! 고 하셨다가 사실 있기는 하단다.
근데 db서버와 통신기능은 존재 하나 DB메이커가 다양 하고 제각기 다 다를 것이다.
그럼 드라이버 또한 다를텐데 자바 입장에서 그 다양한 메이커에 대응하도록 만들어 놓을 수가 없다.
그래서 이 친구를 쓴다. oracleDB랑 연결할 때 쓰는 드라이버 - ojdbc8.jar
그때 받아놨던 것을 프로젝트에 가져온다
ojdbc8.jar 는 Oracle사에서 Java - OracleDB랑 연결할 때 쓰도록 만들어 놓은 것이다.
내 서버의 주소를 가져와야 Java에서 연결이 가능한데 서버 우클릭 후 properties로 오면 있는 저 곳에서 URL을 복사해온다.
주소는 DB메이커별로 쓰는 포맷이 다른데 아까 복사한 URL을 Strin addr 값으로 넣어주면 저 위에있는 주석처리된 기능까지 자동으로 포함한 소스가 된다.
connection 인터페이스를 가져와서 주소, 아이디, 비번 넣어주면 된다.
근데 이렇게 하다보면 저 ojdbc8.jar의 존재감이 없어서 자주 빼먹고 옴으로 오류 발생 할일이 잦을 거니 주의하란다.
그리고 우리가 늘 하던 클로즈 처리도 해준다.
층별안내정보추가 프로그램을 왜 만드나? = 마리오 아울렛 관리자가 SQL을 못하니까
이런 것을 추가해 보란다. 세미클론은 빼고
쓰는 것이야 뭐 쉽다만 문제는 sql을 서버로 전송 - 실행 - 결과확인 까지 전부 해야 된다.
근데 이걸 전부 다 해주는 객체 PrepareStatement가 있다.
이렇게 쓴다. 근데 얘도 다 썼으면 닫아야 한다.
그리고 바보라서 한번에 하나 밖에 못한다. 또 이제는 닫는 순서도 중요하다.
이렇게 만든 역순으로 닫아야 정상 작동 한다.
그리고 이렇게 하면 모든 과정이 처리된다.
근데 우리가 서버를 직접 볼 수 있는게 아니기에 처리가 되었는지 확인 하기 위해서는
이렇게 해준다.
관 :
층 :
뭐 :
이 값을 받아서 SQL 업데이트를 해보잖다.
String format을 통해서 입력해도 되지만
이런식으로 PreparedStatement의 기능을 이용해서 값을 넣어주는 방법이 있다.
내 테이블에 들어갈 값이 int 였기에 오류가 났었고 물음표 순서는 0부터 시작이 아닌 1 부터 시작이라서 고쳐 썼다.
이제 '티'가 포함된 것들을 삭제 해보란다.
어쩐지 '티셔츠' 정확하게 쳤을 때 삭제 하는 것 먼저 해보라고 하시더라
저 %?% 처리를 어떻게 해야 되는지 생각이 안 난다.
이 무슨 괴상한 문법인가.. 뭐 어찌됐든 저게 sql로 가면 '%티%'로 입력이 된단다.
그리고 저기서 where 옆에 p_name 자리를 ?로 대체하고 값을 바꿔서 넣는 것은 불가능한 양식이라 하셨다. 그걸 원한다면 String format을 써야한다.
상품명, 가격, 판매매장을
매장명가나다순, 상품명 가나다순으로
실행과 결과처리를 한 후 이 친구는 실행헤서 몇 줄이 영향받았는지 나오는 것
int row = pstmt.executeUpdate() 같은 경우 CUD용 이다
그럼 지금 처럼 select를 할 때는 어떡할까
ResultSet 실행해서 데이터 가져오기 (Query를 이용한다.)
역시 지긋지긋한 close
이제 출력을 해야 되는데 이 값이 얼마나 있는지 모르기에 for문은 사용불가다.
프로그램이 시작 되고 커서가 데이터 위에 있었는데 rs.next( ) 해주면 다음 데이터로 가는 것
그렇게 다음으로 갔는데 데이터가 없으면 false가 리턴 된다.
반복문의 최종 형태는 이러하다.
연습삼아 관별 상품가격평균을 뽑아보라 하셨다.
sql 문법만 알면 크게 어려울건 없는 것 같다.
일반적으로 학원에서 java + db 수업을 하면 여기서 끝나는데 한계를 한번 넘어보자고 하셨다.
PP(Procedural Programming)
절차지향프로그래밍
OOP(Object Oriented Programming)
객체지향프로그래밍
AOP(Aspect Oriented Programming)
관점지향프로그래밍
패러다임이 이렇게 바뀌어왔다는데 AOP는 살짝 버전업 된 느낌이란다.
다른관점으로 봤을 때 공통적인 기능을 한번에 정리하는 것.
객체 클래스 안에서 기능을 보기 편하게 묶어주는 그런 단순한 의미가 아니라 자주 쓰이는 기능만을 위해 그 기능 자체를 클래스로 만들어버리는 것이 AOP라고 하면 될 것 같다.
오늘은 DB로 어떤 작업을 하던 연결과 닫기 과정은 꼭 들어가게 되는데 그 과정을 한 객체의 기능으로 만들어서 .jar 파일로 export 하고 이용하는 방법 까지 알아봤었다.