JSP에서 JDBC 프로그래밍하기.
JDBC( Java DataBase Connectivity)는 자바에서 데이터베이스와 관련된
작업을 처리할 수 있도록 도와주는 API이다.
JDBC의 구조는
자바어플리케이션 ㅡ> JDBC API ㅡ> JDBC드라이버 ㅡ> 데이터베이스
(우린 JSP일테고)
이런식이다.
각각의 DBMS는 자신에게 알맞은 JDBC 드라이버(클래스 형태로 존재하면 일반적으로 Jar파일로 제공됨)를 제공하고 있으며, JDBC API는 JDBC 드라이버를 거쳐 데이터베이스와 통신을 한다.
나같은 경우는 mysql-connector-java-5.1.22.zip파일을 받았는데
압축을 풀게되면 mysql-connector-java-5.1.22-bin.jar 파일이 있다.
이 jar파일을 원하는프로젝트/WEB-INF/lib 디렉터리에 복붙하면된다.
------------------------------------------------------------------------------------
JDBC 프로그래밍의 코딩 스타일
JDBC 프로그램의 일바너인 실행 순서 ㅡ>
1.JDBC 드라이버로딩
2.데이터페이스 커넥션 구함
3.쿼리 실행을 위한 Statement 객체 생성
4.쿼리 실행
5.쿼리 실행 결과 사용
6 Statement 종료
7.데이터베이스 커넥션 종료
// 1. JDBC 드라이버 로딩
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null; Statement stmt = null; ResultSet rs = null;
try {
// 2. 데이터베이스 커넥션 생성
conn = DriverManager.getConnection(""jdbc:mysql://localhost:3306/chap12", "user", "pass");
// 3. Statement 생성
stmt = conn.createStatement();
// 4. 쿼리 실행
rs = stmt.executeQuery("select * from MEMBER order by MEMBERID");
// 5. 쿼리 실행 결과 출력
while(rs.next()) {
String name = rs.getString(1);
}
} catch(SQLException ex) {
ex.printStackTrace();
} finally {
// 6. 사용한 Statement 종료
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}
// 7. 커넥션 종료
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
DBMS와의 통신을 위한 JDBC 드라이버.
여기서 Class.forName("여기안에는 JDBC드라이버 클래스의 완전한 이름"); 이들어간다.
나같은 경우는 MySQL을 사용하므로 MySQL에 대한 JDBC 드라이버에 해당하는 클래스를 입력하면된다. 그것이 바로 com.mysql.jdbc.Driver 이다.
---------------------------------------------------------------------------------------------
데이터베이스 식별을 위한 JDBC URL
데이터베이스를 구분할 때에도 URL과 비슷한 형식을 취하는 JDBC URL을 사용한다.
MySQL JDBC 드라이버는 다음과 같은 JDBC URL을 사용한다.
jdbc:mysql://HOST[:PORT]/DBNAME[?param=value¶m1=value2&...]
여기서 [HOST]는 MySQL 서버의 호스트 주소를 나타내며, [DBNAME]은 데이터베이스 이름을 나타낸다. [PORT]는 MySQL 서버가 사용하는 포트 번호를 나타낸다. JDBC URL뒤에 몇 가지 설정 정보를
추가할 수 있으며, 표현 방식은 파라미터와 동일하다.
ex)
jdbc:mysql://locallhost:3303/test(DB명임)?useUnicode=true&characterEncoding=euckr
MySQL JDBC 드라이버가 MySQL 서버와 데이터를 주고 받을 때 사용되는 캐릭터 셋을
올바르게 지정하지 않을 경우 한글이나 한자와 같은 글자가 잘못된 값으로 데이터베이스에
저장될 수 있다. 따라서 MySQL에서 한글 데이터를 올바르게 하기 위해서는 위에와 같이
추가 파라미터를 이용해서 캐릭터 셋을 알맞게 지정해 주어야한다.
---------------------------------------------------------------------------------------------
데이터베이스 커넥션
데이터베이스 프로그래밍을 하기 위해서는 먼저 데이터베이스와 연결된 커넥션을 구해야한다.
java.sql.Connection 클래스가 데이터베이스 커넥션을 나타내며, 커낵션은 java.sql.DriverManager
클래스가 제공하는 getConnection() 메서드를 사용해서 구할 수 있다.
DriverManager 클래스는 다음과 같은 두 개의 getConnection()메서드를 제공하고 있다.
DriverManager.getConnection(String jdbcURL)
DriverManager.getConnection(String jdbc URL, String user, String password)
JDBC URL과 데이터베이스 사용자 계정/아이디를 올바르게 지정했다면, DriverManager.getConnection() 메서드는 Connection 객체를 리턴한다.
리턴받은 Connection 객체를 사용해서 필요한 작업을 시작할 수 있는 것 이다.
*여기서 주의할 점*
Connection 객체를 다 사용한 뒤에는 close() 메서드를 호출하여 Connection 객체가 사용한 시스템
자원을 반환해 주어야 한다. 그렇지 않을 경우 시스템 자원이 불필요하게 소모되어 커넥션을 구할 수 없는 상황이 발생할 수도 있다.
Connection을 줄때 try문으로 묶은뒤 finally에서 close()를 사용하여 닫아주면된다.
--------------------------------------------------------------------------------------
Statement를 사용한 쿼리 실행
Connection 객체를 생성한 후에는 Connection으로부터 Statement를 생성한 뒤에 쿼리를 실행할 수 있다. Statement는 다음과 같이 Connection.createStatement() 메서드를 사용하여 생성할 수 있다.
Statement stmt = conn.createStatement();
여기서 conn은 Connection의 객체임.
위와 같이 Statement 클래스를 생성한 다음에는 다음의 두 메서드를 사용해서 쿼리를 실행 할 수 있다.
(리턴값 : ResultSet) executeQuery(String query) : SELECT 쿼리를 실행한다.
(리턴값 :int) executeUpdate(String query) : INSERT , UPDATE, DELETE 쿼리를 실행한다.
executeUpdate()메서드는 리턴값이 int인 이유는 변경된 (또는 삽입된) 레코드의 개수를 리턴하기 때문