Web Programming/JSP

[JSP] 데이터베이스 조작을 위한 자바 라이브러리

IT수정 2024. 10. 8. 12:08

JDBC API

JDBC를 사용함에 있어서 전체적인 흐름은 데이터베이스에 연결하기, 질의 던지기, 그리고 질의에 대한 결과를 받아오는 과정, 마지막으로 연결해제의 단계를 가지고 있다. 이런 과정에서 핵심적으로 쓰이는 API들은 다음과 같다.

  • Driver : 모든 드라이버 클래스들이 구현해야 하는 인터페이스
  • DriverManager : 드라이버를 로드하고 데이터베이스에 연결할 수 있게 됨
  • Connection : 특정 데이터베이스와의 연결을 말함
  • Statement : SQL문을 실행해 작성된 결과를 돌려줌
  • PreparedStatement : 사전에 컴파일된 SQL문을 실행
  • ResultSet : SQL문에 대한 결과를 얻어냄

JDBC API에 대한 전체적인 내용은 java.sql 패키지에 담겨있다. 이는 JDK 1.7에 대한 문서를 참고한다.

 

JDBC URL 기본구조

파라미터 이름 사용 용도 기본 설정값
user 데이터베이스 사용 user 지정 none
password user의 패스워드 지정 none
autoReconnect 연결이 해제 되었을 때 자동 재연결 여부 false
maxReconnects autoReconnect가 true로 설정되었을 때 재연결까지에 대한 설정(몇 번의 연결시도를 할 것인지) 3
initialTimeout autoReconnect가 true로 설정되었을 때 재연결까지 대기시간 설정(초) 2
maxRows 반환받는 최대 행 개수 지정(0이면 모든 행을 반환) 0
useUnicode 유니코드 문자 인코딩 사용 여부 지정 false
characterEncoding useUnicode가 true로 설정되었을 때, 인코딩 종류 지정 none

 

jdbc:mysql://[hostname][:port]/dbname[?param1=value1][&param2=value2]...

 

JSP와 데이터베이스 연동

JSP에서 JDBC를 통해 데이터베이스와 연동을 하는 방법과 자바빈과 JDBC를 사용해서 데이터베이스에 연결하는 부분을 분리시킨 방법 등이 있다. 전자의 경우 데이터베이스에 관련된 프로그램이 JSP 페이지에 포함되어 있다는 것이고, 후자는 자바빈에 분리시킨 것이다.

 

어느 쪽이든 JDBC를 통한 데이터베이스의 연동은 기본적으로 다음 단계를 따른다.

 

1. JDBC 드라이버의 인스턴스 생성

Class.forName("Driver_Name");

 

2. JDBC 드라이버 인스턴스를 통해 DBMS에 대한 연결 생성

Connection con = DriverManager.getConnection("DBURL", "Account ID", "Account PWD");

 

3. Statement 생성

Statement stmt = conn.createStatement();

 

4. 질의문 실행/ResultSet으로 결과받음

ResultSet rs = stmt.executeQuery("select * from ...");

 

5. ResultSet, Statement, 데이터베이스 해지

rs.close();
stmt.close();
con.close();

 

JSP 스크립트릿으로 데이터베이스 연동

JSP 페이지에서 JDBC를 통해 직접 데이터베이스를 연동하는 방법에 대해 알아보자.

 

usingJDBC.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<%@ page import="java.util.*, ch11.*"%>
<%
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    String id = "",
           pwd = "",
           name = "",
           num1 = "",
           num2 = "",
           email = "",
           phone = "",
           zipcode = "",
           address = "",
           job = "";
    int counter = 0;

    try {
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false", "root", "1234");
        stmt = con.createStatement();
        rs = stmt.executeQuery("SELECT * FROM tblRegister");
%>
<html>
<head>
    <title>JSP에서 데이터베이스 연동</title>
    <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFCC">
    <h2>JSP 스크립트릿에서 데이터베이스 연동 예제</h2><br/>
    <h3>회원정보</h3>
    <table bordercolor="#0000FF" border="1">
        <tr>
            <td><strong>ID</strong></td>
            <td><strong>PWD</strong></td>
            <td><strong>NAME</strong></td>
            <td><strong>NUM1</strong></td>
            <td><strong>NUM2</strong></td>
            <td><strong>EMAIL</strong></td>
            <td><strong>PHONE</strong></td>
            <td><strong>ZIPCODE</strong></td>
            <td><strong>ADDRESS</strong></td>
            <td><strong>JOB</strong></td>
        </tr>
        <%
        if (rs != null) {
            while (rs.next()) {
                id = rs.getString("id");
                pwd = rs.getString("pwd");
                name = rs.getString("name");
                num1 = rs.getString("num1");
                num2 = rs.getString("num2");
                email = rs.getString("email");
                phone = rs.getString("phone");
                zipcode = rs.getString("zipcode");
                address = rs.getString("address");
                job = rs.getString("job");
        %>
        <tr>
            <td><%=id%></td>
            <td><%=pwd%></td>
            <td><%=name%></td>
            <td><%=num1%></td>
            <td><%=num2%></td>
            <td><%=email%></td>
            <td><%=phone%></td>
            <td><%=zipcode%></td>
            <td><%=address%></td>
            <td><%=job%></td>
        </tr>
        <%
                counter++;
            }
        }
        %>
    </table>
    <br/>
    Total record: <%=counter%>
    <%
    } catch (SQLException sqlException) {
        out.println("SQL Exception: " + sqlException.getMessage());
    } catch (Exception exception) {
        out.println("Exception: " + exception.getMessage());
    } finally {
        if (rs != null) {
            try { rs.close(); } catch (SQLException ex) {}
        }
        if (stmt != null) {
            try { stmt.close(); } catch (SQLException ex) {}
        }
        if (con != null) {
            try { con.close(); } catch (SQLException ex) {}
        }
    }
    %>
</body>
</html>

 

출력 결과

 

자바빈즈를 이용한 데이터베이스 연동

데이터베이스에 관련된 코드를 JSP 페이지로부터 분리한 예제를 알아보자.

 

RegisterBean.java

package ch11;

public class RegisterBean{

	private String id;
	private String pwd;
	private String name;
	private String num1;
	private String num2;
	private String email;
	private String phone;
	private String zipcode;
	private String address;
	private String job;
	
	public void setId(String id) {
		this.id = id;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setNum1(String num1) {
		this.num1 = num1;
	}
	public void setNum2(String num2) {
		this.num2 = num2;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public String getId() {
		return id;
	}
	public String getPwd() {
		return pwd;
	}
	public String getName() {
		return name;
	}
	public String getNum1() {
		return num1;
	}
	public String getNum2() {
		return num2;
	}
	public String getEmail() {
		return email;
	}
	public String getPhone() {
		return phone;
	}
	public String getZipcode() {
		return zipcode;
	}
	public String getAddress() {
		return address;
	}
	public String getJob() {
		return job;
	}
}

 

RegisterMgr.java

package ch11;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
 
 public class RegisterMgr {
    
 	private final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
 	private final String JDBC_URL = "jdbc:mysql://localhost:3306/mydb?useSSL=false";
 	private final String USER = "root";
 	private final String PASS = "1234";
 
 	public RegisterMgr() {
 	 try{
 	   Class.forName(JDBC_DRIVER);
 	   }catch(Exception e){
 	      System.out.println("Error : JDBC 드라이버 로딩 실패");
 	   }
     }
 
    public Vector<RegisterBean> getRegisterList() {
	   Connection conn = null;
	   Statement stmt = null;
       ResultSet rs = null;
       Vector<RegisterBean> vlist = new Vector<RegisterBean>();
       try {
          conn = DriverManager.getConnection(JDBC_URL, USER, PASS);
          String strQuery = "select * from tblRegister";
          stmt = conn.createStatement();
          rs = stmt.executeQuery(strQuery);
		  while (rs.next()) {
             RegisterBean bean = new RegisterBean();
		 	 bean.setId (rs.getString("id"));
			 bean.setPwd (rs.getString("pwd"));
 			 bean.setName (rs.getString("name"));
 			 bean.setNum1 (rs.getString("num1"));
 			 bean.setNum2 (rs.getString("num2"));
 			 bean.setEmail (rs.getString("email"));
 			 bean.setPhone (rs.getString("phone"));
 			 bean.setZipcode (rs.getString("zipcode"));
 			 bean.setAddress (rs.getString("address"));
 			 bean.setJob (rs.getString("job"));
 			 vlist.addElement(bean);
          }
       } catch (Exception ex) {
          System.out.println("Exception" + ex);
       } finally {
          if(rs!=null)   try{rs.close();}  catch(SQLException e){}
		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
	      if(conn!=null) try{conn.close();}catch(SQLException e){}
       }
       return vlist;
    }
 }

 

usingJDBCBean.jsp

<%@ page contentType="text/html; charset=EUC-KR"%>
<%@ page import="java.util.*, ch11.*"%>
<jsp:useBean id="regMgr" class="ch11.RegisterMgr"/>
<html>
<head> 
<title>JSP에서 데이터베이스 연동</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFCC">
<h2>Bean를 사용한 데이터베이스 연동 예제</h2><br/>
<h3>회원정보</h3>
<table bordercolor="#0000ff" border="1">
<tr>
   <td><strong>ID</strong></td>
   <td><strong>PASSWD</strong></td>
   <td><strong>NAME</strong></td>
   <td><strong>NUM1</strong></td>
   <td><strong>NUM2</strong></td>
   <td><strong>EMAIL</strong></td>
   <td><strong>PHONE</strong></td>
   <td><strong>ZIPCODE/ADDRESS</strong></td>
   <td><strong>JOB</strong></td>	
</tr>
<%
   Vector<RegisterBean> vlist = regMgr.getRegisterList();
	int counter = vlist.size();
	for(int i=0; i<vlist.size(); i++){
   		RegisterBean regBean = vlist.get(i);
%>
<tr>
	<td><%=regBean.getId()%></td>
	<td><%=regBean.getPwd()%></td>
	<td><%=regBean.getName()%></td>
	<td><%=regBean.getNum1()%></td>
	<td><%=regBean.getNum2()%></td>
	<td><%=regBean.getEmail()%></td>
	<td><%=regBean.getPhone()%></td>
	<td><%=regBean.getZipcode()%>/<%=regBean.getAddress()%></td>
	<td><%=regBean.getJob()%></td>
</tr>
<%}%>
</table>
<br/><br/>
total records : <%= counter %> 
</body>
</html>

 

출력 결과

 

JSP 스크립트릿으로 JDBC를 통하여 데이터베이스에 연결한 경우보다 프로그램 코드가 확실히 줄어들고 보다 간결해졌다는 것을 알 수 있다. 자바빈즈 전용 태그를 사용했을 뿐 JSP에서 데이터베이스 연결에 필요한 모든 명령어들이 있는 페이지의 결과와 다름이 없다는 것을 실행 결과를 통해 알 수 있다.

'Web Programming > JSP' 카테고리의 다른 글

[JSP] Connection Pool  (0) 2024.10.08
[JSP] JDBC로 데이터베이스 연동  (0) 2024.10.08
[JSP] 데이터베이스 작성  (3) 2024.10.08
[JSP] 데이터베이스 설치  (0) 2024.10.08
[JSP] 자바빈즈  (0) 2024.10.07