[JSP] JDBC 사용 예제

2019. 7. 17. 17:30 Java 관련/JSP,Servlet

JDBC 사용 예제


앞에서 JDBC의 연동 방법 및 사용 객체들을 포스팅하였다.


[JSP] JDBC를 사용한 데이터베이스 연동


[JSP] JDBC 프로그래밍에 사용되는 객체


이번 포스팅에서는 JDBC를 사용해 실제로 데이터베이스에 연결하는 예제 코드를 다뤄보겠다.


- 예제 환경


> DBMS : MySQL

> DB Server IP/Port : localhost:3306

> Database Name : jdbcTest

> Database ID : testid

> Database password : testpw


* eclipse 에서 프로젝트에 JDBC MySQL Connector Libarary가 추가되어 있어야 한다.


* MySQL 다운로드 페이지


* MySQL 드라이버 다운로드 페이지



1. JDBC를 사용한 JSP와 데이터베이스 연동 확인


- JDBC를 사용하여 데이터베이스에 연동을 위해서는 해당 DBMS의 드라이버를 등록한 후, getConnection()을 사용해 연결하면 된다.


- 연결에 문제가 발생하면 Exception이 발생한다.


<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>

<%@ page import = "java.sql.*" %>                    <!-- JSP에서 JDBC의 객체를 사용하기 위해 java.sql 패키지를 import 한다 -->


<%


Connection conn = null;                                        // 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 객체를 얻어온다.

out.println("제대로 연결되었습니다.");                            // 커넥션이 제대로 연결되면 수행된다.


}catch(Exception e){                                                    // 예외가 발생하면 예외 상황을 처리한다.

e.printStackTrace();

}

%>





2. JDBC를 사용한 테이블에 레코드 추가, 수정, 삭제 (insert, update, delete)


- JDBC를 사용하여 테이블에 쿼리를 실행하기 위해서 PreparedStatement 객체를 사용한다.


- insert, update, delete는 executeUpdate() 를 호출하여 쿼리를 실행한다.


- 쿼리가 실행 성공 실패 여부와 상관없이 finally 를 통해서 PreparedStatement  객체와, Connection 객체의 자원을 해제해줘야 한다.


- 여기서 해제 순서가 중요하다.


<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>

<%@ page import = "java.sql.*" %>                    <!-- JSP에서 JDBC의 객체를 사용하기 위해 java.sql 패키지를 import 한다 -->


<%


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 = "insert into member1 values(?,?,?,?)";        // sql 쿼리

pstmt = conn.prepareStatement(sql);                          // 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{                                                            // 쿼리가 성공 또는 실패에 상관없이 사용한 자원을 해제 한다. (순서중요)

if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}            // PreparedStatement 객체 해제

if(conn != null) try{conn.close();}catch(SQLException sqle){}            // Connection 해제

}

%>




3. JDBC를 사용한 테이블의 레코드들을 화면에 표시 (select)


- select 명령어는 executeQuery() 를 호출하며 호출 결과를 ResultSet 객체에 담는다.


- 결과가 있는 ResultSet 객체에서 next() 메소드로 커서를 이동시키며, 데이터를 가져온다.


- 쿼리가 실행 성공 실패 여부와 상관없이 finally 를 통해서 ResultSet 객체와 PreparedStatement  객체 Connection 객체의 자원을 해제해줘야 한다.


- 여기서 해제 순서가 중요하다.


<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>

<%@ page import = "java.sql.*" %>                    <!-- JSP에서 JDBC의 객체를 사용하기 위해 java.sql 패키지를 import 한다 -->


<html>

<head></head>

<body>

<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%></td>

<td width="100"><%=pw%></td>

<td width="100"><%=name%></td>

<td width="100"><%=register.toString()%></td>

</tr>

<%

}


}catch(Exception e){                                                    // 예외가 발생하면 예외 상황을 처리한다.

e.printStackTrace();

out.println("member 테이블 호출에 실패했습니다.");

}finally{                                                            // 쿼리가 성공 또는 실패에 상관없이 사용한 자원을 해제 한다.  (순서중요)

if(rs != null) try{rs.close();}catch(SQLException sqle){}            // Resultset 객체 해제

if(pstmt != null) try{pstmt.close();}catch(SQLException sqle){}   // PreparedStatement 객체 해제

if(conn != null) try{conn.close();}catch(SQLException sqle){}   // Connection 해제

}

%>

</table>

</body>

</html>



출처: https://hyeonstorage.tistory.com/112?category=554979 [개발이 하고 싶어요]