테이블을 하나 만들고 그 테이블에 입력된 값들을 출력해보는 예시로 데이터베이스 연결을 테스트 해보겠습니다.


위와 같은 구조로 STUDENT라는 테이블을 하나 만들었습니다.


그리고 위와 같이 데이터들을 추가하였습니다.


이미지를 추가하면서 정리하려고 하는데 이미지마다 점점 소스가 추가되는 형식으로 정리합니다.


1. JDBC드라이버 로딩하기


JDBC클래스의 이름

Oracle - jdbc.driver.OracleDriver

MySQL - com.mysql.jdbc.Driver

MS SQL - com.microsoft.sqlserver.jdbc.SQLServerDriver


2. 데이터베이스 연결하기 ( java.sql.Connection 과 java.sql.DriverManager 를 import해주어야 함 )

데이터베이스에 연결을 하기위해서는 연결 커넥션이 필요합니다.

java.sql.Connection 클래스가 데이터베이스 커넥션입니다.

java.sql.DriverManager클래스가 제공하는 getConnection메소드를 이용해서 Connection을 구할 수 있습니다.

이때 필요한 파라미터값으로 JDBC URL 그리고 데이터베이스의 계정과 암호가 필요합니다.

JDBC URL, 계정, 암호를 정확히 넣어주었다면 Connection객체를 리턴합니다.





3. Statement객체를 이용해 쿼리를 실행하기( java.sql.Statement를 import해주어야 함 )

데이터 베이스에 연결이 되었으니 이제 필요한 쿼리를 실행해 작업을 하면됩니다.

getConnection()가 리턴해준 Connecction객체에 대해서 createStatement()를 사용하면 Statement객체를 리턴시켜 줍니다.


이렇게 구한 Statement객체에 대해서 두가지 메소드를 이용해서 쿼리를 실행합니다.

1. ResultSet exetuteQuery(String query)    -->    SELECT 쿼리를 실행하는 경우 사용.

2. int executeUpdateQuery(String query)    -->    INSERT, UPDATE, DELETE 쿼리를 실행하는 경우 사용.


지금은 데이터를 SELECT해서 출력시키려고 하기 때문에 executeQuery()를 사용할겁니다.

executeQuery()는 ResultSet타입의 객체로 리턴합니다.

ResultSet에서 제공하는 메소드를 이용해서 결과를 얻어 올 수 있습니다.



ResultSet클래스는 결과값을 행으로 저장을 하게 됩니다.

위에서 SELECT * FROM student 쿼리를 실행했으니 student테이블의 모든 데이터를 읽어오게 됩니다.



ResultSet클래스는 next()라는 메소드를 제공하는데 커서를 통해 각 행에 접근을 하게됩니다.

위의 그림처럼 처음에는 커서가 첫 행 이전에 위치해 있습니다.

다음 행을 가리키기위해 next()를 사용하면 커서가 다음 행으로 이동하게 됩니다.

이렇게 가다가 마지막 행에 커서가 위치하게 되면 false를 리턴합니다.

이렇게 해서 ResultSet객체에 담긴 결과를 모두 출력할겁니다.



4. 데이터베이스 연결 해제하기 / 자원 반환하기

DB를 이용해 작업을 완료하였다면 이제 자원을 반환해주어야합니다.

반환하지 않고 계속 그대로 둔다면 자원이 낭비됩니다.

자원을 반환 할 때에는 생성을 했던 역순으로 close()처리를 해줍니다.



최종적으로 정리된 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.sql.SQLException, java.sql.DriverManager, 
        java.sql.Connection, java.sql.Statement, java.sql.ResultSet"%>
<%!    
    String driver = "oracle.jdbc.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:orcl";
    String dbId = "scott";
    String dbPw = "tiger";
    String query = "SELECT * FROM student";
    
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Student</title>
</head>
<body>
<%
try{
    Class.forName(driver);
    conn = DriverManager.getConnection(url, dbId, dbPw);
    stmt = conn.createStatement();
    rs = stmt.executeQuery(query);
 
    while(rs.next()){
        String name = rs.getString("Sname");
        int year = rs.getInt("Syear");
        int no = rs.getInt("Sno");
        String dept = rs.getString("dept");
        
        out.println("이름 : " + name + ", 학년 : " + year + ", 학번 : " + no + ", 학과 : " + dept + "<br />");
    }
    
catch(Exception e) {
finally {    
    try{
        if(rs != null) rs.close();
        if(stmt != null) stmt.close();
        if(conn != null) conn.close();
    } catch(Exception e){}
}
%>
</body>
</html>
cs


실행을 해보면~




성공적으로 데이터를 읽어왔습니다!!