[MySQL] JDBC를 사용해 JSP페이지와 DB 연동 테스트

류명운

·

2015. 5. 7. 03:13

반응형

[MySQL] JDBC를 사용해 JSP페이지와 DB 연동 테스트


이번 포스팅에서는 JSP페이지 내에서 JDBC를 사용해 DB에 연결하는 예제코드를 다뤄보겠다.


1. 예제 환경

  • DBMS : MySQL
  • DB Server IP/Port : localhost:3306
  • Database Name : jdbcTest
  • Database ID : testid
  • Database password : testpw
  • eclipse 프로젝트에 JDBC MySQL Connector Libarary가 추가되어 있어야 한다.


2.  JSP와 DB 연동 확인

  • JDBC를 사용하여 데이터베이스에 연동을 위해서는 해당 DBMS의 드라이버를 등록한 후, getConnection()을 사용해 연결하면 된다.
  • 연결에 문제가 발생하면 관련 Exception이 발생한다.
<%@ page import = "java.sql.*" %>
<%
    // null로 초기화 한다.
    Connection conn = null;
    try{
        // 사용하려는 데이터베이스명을 포함한 URL 기술
        String url = "jdbc:mysql://localhost:3306/jdbcTest";
        String id = "testid";       // 사용자계정
        String pw = "testpw";   // 사용자계정의 패스워드
        // 데이터베이스와 연동하기 위해 DriverManager에 등록한다.
        Class.forName("com.mysql.jdbc.Driver");
        // DriverManager 객체로부터 Connection 객체를 얻어온다.
        conn=DriverManager.getConnection(url,id,pw);
        // 커넥션이 제대로 연결되면 수행된다.
        out.println("제대로 연결되었습니다.");
    // 예외가 발생하면 예외 상황을 처리한다.
    }catch(Exception e){
        e.printStackTrace();
    }
%>


3. 테이블에 레코드 추가, 수정, 삭제 테스트(insert, update, delete)

  • JDBC를 사용하여 테이블에 쿼리를 실행하기 위해서 PreparedStatement 객체를 사용한다.
  • insert, update, delete는 executeUpdate() 를 호출하여 쿼리를 실행한다.
  • 쿼리가 실행 성공 실패 여부와 상관없이 finally 를 통해서 PreparedStatement  객체와, Connection 객체의 자원을 해제해줘야 한다. (해제 순서 중요)
<%@ page import = "java.sql.*" %>
<%
    Connection conn = null;
    PreparedStatement pstmt = null;
    try{
        String url = "jdbc:mysql://localhost:3306/jdbcTest";
        String id = "testid";   
        String pw = "testpw"; 
        Class.forName("com.mysql.jdbc.Driver");                  
        conn=DriverManager.getConnection(url,id,pw);       
        // sql 쿼리  
        String sql = "insert into member1 values(?,?,?,?)";
        // prepareStatement에서 해당 sql을 미리 컴파일한다.
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1,"test");
        pstmt.setString(2,"passwd");
        pstmt.setString(3,"명우니닷컴");
        // 현재 날짜와 시간
        pstmt.setTimestamp(4, new Timestamp(System.currentTimeMillis()));
        // 쿼리 실행
        pstmt.executeUpdate();
        // 성공시 메시지 출력
        out.println("member 테이블에 새로운 레코드를 추가했습니다.");
    // 예외가 발생하면 예외 상황을 처리한다.
    }catch(Exception e){
        e.printStackTrace();
        out.println("member 테이블에 새로운 레코드 추가에 실패했습니다.");
    // 쿼리가 성공 또는 실패에 상관없이 사용한 자원을 해제 한다. (순서중요)
    }finally{
        // PreparedStatement 객체 해제
        if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}
        // Connection 해제
        if(conn != null) try{conn.close();}catch(SQLException sqle){}
    }
%>


4. 테이블의 레코드들을 화면에 표시(select)

  • select 명령어는 executeQuery() 를 호출하며 호출 결과를 ResultSet 객체에 담는다.
  • 결과가 있는 ResultSet 객체에서 next() 메소드로 커서를 이동시키며, 데이터를 가져온다.
  • 쿼리가 실행 성공 실패 여부와 상관없이 finally 를 통해서 ResultSet 객체와 PreparedStatement  객체 Connection 객체의 자원을 해제해줘야 한다.
<%@ page import="java.sql.*"%>
<table width="550" border="1">
	<%
		Connection conn = null; // null로 초기화 한다.
		PreparedStatement pstmt = null;

		try {
			String url = "jdbc:mysql://localhost:3306/jdbcTest"; // 사용하려는 데이터베이스명을 포함한 URL 기술
			String id = "testid"; // 사용자 계정
			String pw = "testpw"; // 사용자 계정의 패스워드

			Class.forName("com.mysql.jdbc.Driver"); // 데이터베이스와 연동하기 위해 DriverManager에 등록한다.
			conn = DriverManager.getConnection(url, id, pw); // DriverManager 객체로부터 Connection 객체를 얻어온다.

			String sql = "select * from member where id = ?"; // sql 쿼리
			pstmt = conn.prepareStatement(sql); // prepareStatement에서 해당 sql을 미리 컴파일한다.
			pstmt.setString(1, "test");

			rs = pstmt.executeQuery(); // 쿼리를 실행하고 결과를 ResultSet 객체에 담는다.

			while (rs.next()) { // 결과를 한 행씩 돌아가면서 가져온다.

				String id = rs.getString("id");
				String pw = rs.getString("pw");
				String name = rs.getString("name");
				Timestamp register = rs.getTimestamp("reg_date");
	%>
	<tr>
		<td width="100"><%=id%><%=pw%><%=name%><%=register.toString()%>
</table>


반응형