JSP와 오라클 DB 연동을 이용한 간단한 회원관리기초프로그램(1)
이승호 강사(javateacher@naver.com)
1. 회원 table 생성
create table member (
id varchar2(12) not null primary key,
passwd varchar2(12),
name varchar2(10),
jumin1 varchar2(6),
jumin2 varchar2(7),
email varchar2(30),
blog varchar2(50),
reg_date date
);
2. JDBC 설정
1) Oracle jdbc드라이버 접속
형식) jdbc:oracle:thin@HOST(IP):1521:SID
예) jdbc:oracle:thin@127.0.0.1:1521:ORCL
Cf) Mysql의 경우
예) jdbc:mysql://localhost:3306/ID
2) Oracle 드라이버 위치 및 설정
* 드라이버의 원래의 위치 :
C:\oracle\product\10.2.0\db_1\jdbc\lib (oracle 10g 경우)
; Classes.jar 혹은 Classes.zip
; class path에 반영 혹은 Web Container(WAS)의 lib 폴더에 반영(복사)
3) jdbc 드라이버 프로그램 작성 과정 개요
Package import
JDBC 드라이버 Load
Connection 객체 생성
Statement 객체 생성
Query 수행
Resulttest 객체로부터 데이터 추출
Resultest Close
Statement 객체 Close
Connection 객체 Close
4) jdbc 드라이버 프로그램 적용 과정
Step 1) 드라이버 로딩
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Cf) mysql : Class.forName(“com.mysql.jdbc.Driver”);
Step 2) Connection 객체 생성
Connection conn =
DriverManager.getConnection(“jdbc:oracle:thin@127.0.0.1:1521:ORCL”,”scott”,”tiger”);
Cf) mysql :
Connection conn =
DriverManager.getConnection(“jdbc:mysql://localhost:3306/myID”,
”ID”,”PASS”);
Step 3) Statement(preparedStatement) 객체 생성
SQL Query 생성, 실행
Statement stmt = con.createStatement();
Step 4) Query 수행
ResultSet rs = stmt.excuteQuery(“select * from table명”);
ResultSet rs = stmt.excuteUpdate(“update table명 set field명 = ‘값’
where field명=’값’“);
; Insert, Update, Delete문 일 경우
Step 5) ResultSet 처리
while (rs.net()) {
out.println(rs.getString(“id”));
out.println(rs.getString(“password”));
}
참고) preparedStatement 객체
Connection 객체의 preparedStatement() 메소드 사용하여 객체 생성.
# Statement 객체와의 차이점
preparedStatement 객체는 SQL 문장이 미리 컴파일 되고, 실행 시간 동안 인수 값을 위한 공간을 확보할 수 있다. 즉 미리 컴파일 되기 때문에 Query 수행 속도가 Statement보다 빠르다. 또한 작은 따옴표(‘) 처리문제가 Statement에 비해 원활.
예) I’m coming 이라는 구문의 경우
Statement 객체 : I’’m coming ; 두번 표시
preparedStaement 객체 : I’m coming ; 한번 표기(작은 따옴표문제
자동 처리)
# preparedStatement 객체는 이럴 때 유용 !
1) 동일한 질의문을 특정 값만 바꾸어서 여러 번 실행할 때.
2) 다량의 데이터를 다룰 시 질의문을 정리할 필요가 있을 때.
3) 인수가 많아서 질의문을 정리해야 될 필요가 있을 때.
참고) CallableStatement 객체
prepareCall() 메소드를 사용하여 객체 생성.
주로 이것은 Stored Procedure를 사용하기 위해 사용됨.
# Stored Procedure : 해당 DB SQ,L문을 저장한 것.
미리 저장된 쿼리를 사용하기 때문에 역시 수행속도가 빠름.
CallableStaement는 DB에 저장된 Stored Procedure를 단지 호출하는 것만으로도 처리가 가능하다.
# 항상 예외상황(Exception)에 대비한다.
try {
………….. JDBC 처리 구문들………..
} catch (SQLException sqle) { ……
}
이승호 강사(javateacher@naver.com)
1. 회원 table 생성
create table member (
id varchar2(12) not null primary key,
passwd varchar2(12),
name varchar2(10),
jumin1 varchar2(6),
jumin2 varchar2(7),
email varchar2(30),
blog varchar2(50),
reg_date date
);
2. JDBC 설정
1) Oracle jdbc드라이버 접속
형식) jdbc:oracle:thin@HOST(IP):1521:SID
예) jdbc:oracle:thin@127.0.0.1:1521:ORCL
Cf) Mysql의 경우
예) jdbc:mysql://localhost:3306/ID
2) Oracle 드라이버 위치 및 설정
* 드라이버의 원래의 위치 :
C:\oracle\product\10.2.0\db_1\jdbc\lib (oracle 10g 경우)
; Classes.jar 혹은 Classes.zip
; class path에 반영 혹은 Web Container(WAS)의 lib 폴더에 반영(복사)
3) jdbc 드라이버 프로그램 작성 과정 개요
Package import
JDBC 드라이버 Load
Connection 객체 생성
Statement 객체 생성
Query 수행
Resulttest 객체로부터 데이터 추출
Resultest Close
Statement 객체 Close
Connection 객체 Close
4) jdbc 드라이버 프로그램 적용 과정
Step 1) 드라이버 로딩
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Cf) mysql : Class.forName(“com.mysql.jdbc.Driver”);
Step 2) Connection 객체 생성
Connection conn =
DriverManager.getConnection(“jdbc:oracle:thin@127.0.0.1:1521:ORCL”,”scott”,”tiger”);
Cf) mysql :
Connection conn =
DriverManager.getConnection(“jdbc:mysql://localhost:3306/myID”,
”ID”,”PASS”);
Step 3) Statement(preparedStatement) 객체 생성
SQL Query 생성, 실행
Statement stmt = con.createStatement();
Step 4) Query 수행
ResultSet rs = stmt.excuteQuery(“select * from table명”);
ResultSet rs = stmt.excuteUpdate(“update table명 set field명 = ‘값’
where field명=’값’“);
; Insert, Update, Delete문 일 경우
Step 5) ResultSet 처리
while (rs.net()) {
out.println(rs.getString(“id”));
out.println(rs.getString(“password”));
}
참고) preparedStatement 객체
Connection 객체의 preparedStatement() 메소드 사용하여 객체 생성.
# Statement 객체와의 차이점
preparedStatement 객체는 SQL 문장이 미리 컴파일 되고, 실행 시간 동안 인수 값을 위한 공간을 확보할 수 있다. 즉 미리 컴파일 되기 때문에 Query 수행 속도가 Statement보다 빠르다. 또한 작은 따옴표(‘) 처리문제가 Statement에 비해 원활.
예) I’m coming 이라는 구문의 경우
Statement 객체 : I’’m coming ; 두번 표시
preparedStaement 객체 : I’m coming ; 한번 표기(작은 따옴표문제
자동 처리)
# preparedStatement 객체는 이럴 때 유용 !
1) 동일한 질의문을 특정 값만 바꾸어서 여러 번 실행할 때.
2) 다량의 데이터를 다룰 시 질의문을 정리할 필요가 있을 때.
3) 인수가 많아서 질의문을 정리해야 될 필요가 있을 때.
참고) CallableStatement 객체
prepareCall() 메소드를 사용하여 객체 생성.
주로 이것은 Stored Procedure를 사용하기 위해 사용됨.
# Stored Procedure : 해당 DB SQ,L문을 저장한 것.
미리 저장된 쿼리를 사용하기 때문에 역시 수행속도가 빠름.
CallableStaement는 DB에 저장된 Stored Procedure를 단지 호출하는 것만으로도 처리가 가능하다.
# 항상 예외상황(Exception)에 대비한다.
try {
………….. JDBC 처리 구문들………..
} catch (SQLException sqle) { ……
}