[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>
반응형
'삶의 늪에 들어 가기 전 > 정리중(미정리)' 카테고리의 다른 글
개발 환경 다운로드사이트 (0) | 2015.05.15 |
---|---|
[네트워크 프로그래밍1] 채팅 통신 프로토콜 조사하기(Jabber) (0) | 2015.05.11 |
[JAVA] 자바 재귀호출을 이용한 하위 디렉토리 검색하기 (0) | 2015.05.06 |
[한국성서대학교/한국성서대 묵상지]10주차 묵상지 (1) | 2015.05.06 |
[한국성서대학교/한국성서대 묵상지] 9주차 묵상지 (3) | 2015.05.04 |