JDBC
JDBC환경구성
윈도우-프리퍼런스-자바-빌드패스-클래스패스 배리어블-JRE_LIB
JRE_LIB의 위치를 잘 볼 것
oraclexe폴더 - app - oracle - product - 11.2.0 - server - jdbc - lib의 ojdbc6.jar를 복사
JRE_LIB이 있는 폴더 'lib' - ext 폴더에 ojdbc6.jar를 붙여넣음
Class.forName("oracle.jdbc.driver.OracleDriver");
를 테스트하여 try~catch문을 통해 try에 sysout("할말")을 적어 성공여부를 확인함
자바 프로그램 | Statement | JDBC드라이버 | → | DBMS(오라클) | → | DB(xe) |
→ 커넥션 connection | ||||||
PreparedStatement | ||||||
String url = "jdbc:oracle:thin:@localhost:1521:xe"; //상기 코드는 커넥션 연결 성공을 실험하는 코드이다. |
DAO(Data Access Object)클래스
- 일반적으로 table당 1개씩 작성함
이하, StringBuffer를 통하여 사용. 실사용 안함.
public void insert(String ssn, String name, int age) { |
이하 실제로 사용되는 인서트 코드(PreparedStatement)
public void insert(MemberDTO dto) { |
select계통 JDBC코드
public ArrayList<MemberDTO> selectAll() { |
상기 코드에서 resultSet은 hashSet과 동등한 방식으로 작동함
트랜젝션
- ACID
ACID처리의 예시
A의 계좌에서 B에게 1억을 송금 A의 계좌에서 -1억 B의 계좌에서 +1억 |
A의 계좌에서 1억 차감 지연 B의 계좌에 1억 증가 성공 A의 계좌에서 1억 차감 확정 |
commit
rollback
savepoint
트랜젝션 컨트롤 랭귀지(TCL)
conn.setAutoCommit(false);
을 이용하여 오토커밋을 막고,
커밋과 롤백을 이용하여 처리함.
connection conn = null;
preparedstatement pstmt = null;
String sql1 = "update bank set balance = balance - ? where bid=?";
String sql2 = "update bank set balance = balance + ? where bid=?";
boolean ok = false;
try{
conn = DriverManager.getConnection(URL, USER, PW);
pstmt = conn.prepareStatement(sql);
pstmt.executeupdate();
ok = true;
try{
if(ok == true) conn.commit();
else conn.rollback();
이후 sql문 날린 후,
팁. BD에서 default 0 으로 기본값을 0으로 할 수 있음.
이클립스에서 오라클DB실행법 데이터 소스 익스플로러 - 데이터베이스 커넥션 - 오라클 - 뉴 드라이버 디피니션 name/type : 오라클 신 드라이버 11버전 JAR List : ojdbc14 삭제 - add JAR/Zip : java\jre1.8.0_141\lib\ext\ojdbc6.jar Properties : connection URL을 jdbc:oracle:thin:@localhost:1521:xe로 변경 database Name 을 xe로 변경 아이디/패스워드 입력 ok후 테스트커넥션 이후 oracle에 우클릭 후 커넥션 해주면 됨.
이후 작업을 위해서 우클릭 - SQL File - 파일네임입력 - 데이터베이스 서버 타입(oracle_11) - 커넥션 프로필 네임(new Oracle) - database name(xe)
이후 원하는 명령어를 입력하고 블럭지정 후 alt+x로 실행 세미콜론을 찍어서는 안됨. |
테이블에서의 기본키
- 테이블에서 특정 레코드 하나를 식별할 수 있게 하는 컬럼
- 유니크 제약조건, not null제약조건
외래키
- 특정 테이블A 에서 기본키로 지정되어 있어야 함
- 다른 테이블에서 컬럼으로 사용
- 서로 다른 테이블간에 종속관계를 생성시켜주는 키
- A테이블에 있는 데이터이거나, null값만 들어갈 수 있음.
외래키와 본 테이블간의 연결은 join
테이블 생성 - 외래키테이블 생성 - 연결
CREATE TABLE employee(
CREATE TABLE depart(
alter table employee add constraint fk_employee foreign key(did)
insert into employee values ('e001', null, '홍길동') insert into depart values ('d001', '인사부')
commit
select * from employee, depart select * from employee e, depart d where e.did = d.did ㄴ 상기 코드는 임플로이와 디파트의 같은 did값을 가진 값의 추출
select e.eid, e.ename, d.dname from employee e, depart d where e.did = d.did ㄴ (e키조인) 상기 코드는 임플로이와 디파트의 같은 did값을 가진 값을 추출하되, e.eid, e.ename, d.did만을 추출
select * from depart |
inner join/ outer join 사용
select e.eid, e.ename, d.dname from employee e inner join depart d on e.did = d.did ㄴ 상기 코드는 위의 e키조인과 같음 select e.eid, e.ename, d.dname from employee e inner join depart d on e.did = d.did ㄴ 상기 코드는 innerjoin에 '왼쪽'인 employee 값을 전부 출력함 select e.eid, e.ename, d.dname from employee e right outer join depart d on e.did = d.did ㄴ 상기 코드는 innerjoin에 '오른쪽'인 depart값을 전부 출력함
|
생년월일 입력,조회하는 함수
create table agetest( insert into agetest values ('2010-12-17') select * from agetest select floor(months_between(sysdate, birth)/12) age from agetest |
select floor(months_between(sysdate, '1991-08-30')/12) age from dual; |
months_between = 두 요소값의 사이 시간을 개월수로 환산
sysdate = 현재시간 호출
floor = 소숫점 버리기
한국나이 출력하는 코드
select (cyear-birth)+1 한국나이 |
트리거
- 특정 기능이 실행되었을 때 또 다른 기능을 추가적으로 실행할 필요가 있을 때.
create or replace trigger afterinsertmember after insert on member for each row beclare begin insert into member_back (ssn, name, age) values (:new.ssn, :new.name, :new.age); end; / |
sfterinsertmember = 이름
after = 작업 후에 트리거를 발동하겠다. insert = insert작업 후에 member = 멤버 테이블에서 for each row = 매번 실행할 것
오라클 DB의 데이터 백업 방법
exp userid=아이디/비밀번호 @xe file=c:\파일명.확장자
exp userid=아이디/비밀번호 @xe file=c:\dump.dmp
tables = member(member, employee, depart)
멤버, 임플로이, 디파트 테이블만 백업받으려면 마지막줄을 추가사용
를 사용하여 백업을 하며, 일반 커맨드창에서 하여야 함.(db에 연결해서는 안됨)
덧. 비밀번호 후 @xe는 붙여써야 하나 메일주소로 입력되기에...
백업된 데이터 사용 방법
imp system/sys1234 @xe
fromuser=joeun
touser=system
file=c:\dump.dmp
상기 코드를 통하여 system계정을 이용하여 joeun의 자료 dump.dmp를 system계정에 업로드할 수 있음.
view = 가상 테이블
view의 작성법
create or replace view view_emp as select e.eid, e.ename, d.dname from employee e inner join depart d on e.did = d.did |
view에는 새로운 자료의 추가는 불가능하나,
자료의 변경 및 삭제는 가능함.
그 방법은 통상의 방법으로 가능 하며
view의 삭제는
drop view를 통하여 진행하게 됨.
left outer join의 이용
create or replace view view_empleft as select e.eid, e.ename, d.dname from employee e left outer join depart d on e.eid=d.did |
create or replace view view_empleft as select e.eid, e.ename, d.dname from employee e left outer join depart d on e.eid=d.did where e.did is null with check option; |
with에 view용 옵션을 부여할 수 있음.
create or replace view view_member2 as select * from member2 with read only; |
상기는 읽기전용
index
ㄴ 테이블 내의 자료를 빠르게 찾아내기 위한 방식. 조건을 만들어 부여하는 것.
ㄴ 인덱스의 제작
create index idx_member on member (name, age) |
stored procedure, 저장 프로시저
ㄴ특정 기능을 축약하여 저장하는 기능
create or replace procedure insertmember ( myssn in varchar2, myname in varchar2, myage in number ) as begin insert into member (ssn, name, age) values (myssn, myname, myage); end; / |
를 사용하여 저장 프로시저 insertmember를 작성할 수 있음.
사용은 아래와 같음
exec insertmember (ssn값, name값, age값); |
상기 저장 프로시저를 이용하여 이클립스에서 사용하는 법은
Connection conn = null; |
사용자 함수 제작
0.9를 곱하고 반환 | create or replace function fn_haha (price in number) return number is begin return price*0.9; end; / | select fn_haha(100000) from dual; |
판매금액*할인율 = 할인가격 반환 | create or replace function fn_sale (price in number, sale in number) return number is begin return price*sale; end; / | select fn_sale(35000, 0.9) from dual; |
자신이 가진 오브젝트 정보
select object_name, object_type, timestamp
from user_objects;
로 확인가능
현재 접속중인 사용자의 테이블을 확인하는 법(카탈로그 정보 조회)
select * from user_catalog;
데이터 사전 = data dictionary
ㄴ system catalog
ㄴ 데이터에 대한 데이터
ㄴ meta data
'JAVA > JAVA 기본' 카테고리의 다른 글
JAVA URL의 사용 (0) | 2017.10.11 |
---|---|
JAVA Calender클래스 (0) | 2017.10.11 |
Oracle DB (0) | 2017.10.11 |
JAVA ioStream (0) | 2017.10.11 |
JAVA File클래스 (0) | 2017.10.11 |