* 결과
* DB내용
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test_result.jsp" method="post">
조회 ID : <input type="text" name="id"><input type="submit" value="조회">
</form>
</body>
</html>
<%@page import="model.dto.TestDTO"%>
<%@page import="model.dao.TestDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String id = request.getParameter("id");
TestDAO dao = TestDAO.getInstance();
TestDTO dto = dao.selectTestById(id);
if(dto==null){
%>
조회결과가 없습니다.
<%}else{%>
조회결과<br>
ID : <%=dto.getId() %><br>
Num : <%=dto.getNum() %>
<%} %><br>
<a href="test_select.jsp">조회폼</a>
</body>
</html>
package model.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import model.dto.TestDTO;
//Test 테이블과 관련된 DB로직을 처리하는 DAO클래스
public class TestDAO {
private BasicDataSource ds; //서버(톰켓)에서 제공해 주는 객체
//싱글턴 패턴을 사용하여 커넥션풀이 한번만 생성되도록 설정하였다. getInstance()를 통해서 객체를 받는다.
private static TestDAO instance = new TestDAO();
public static TestDAO getInstance(){
return instance;
}
private TestDAO(){
ds = new BasicDataSource();//객체 생성
//프라퍼티 설정
//1. 연결할 DB와 관련된 설정
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");//BasicDataSource를 사용하면 따로 드라이버 로딩을 해줄 필요가 없다. 바로 처리가능
ds.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:XE");
ds.setUsername("scott");
ds.setPassword("tiger");
//2. Connection Pool 관련 설정
ds.setInitialSize(1);//초기에 생성될 커넥션객체의 수. default : 0
ds.setMaxActive(10);//최대 몇개의 커넥션 객체를 만들 것인지, default : 8
ds.setMaxIdle(3);//사용되지 않고 대기하는 커넥션객체의 최대 개수. default : 0 , (풀에서 기다리고 있는 커넥션객체의 수를 지정해 주겠다)
ds.setMinIdle(1);//사용되지 않고 대기하는 커넥션객체의 최소 개수. default : 0
}
//test 테이블의 레코드를 id를 통해 조회하는 메소드
public TestDTO selectTestById(String id)throws SQLException{
//중간에 예외가 발생하더라도 connection 연결은 끊어 줘야 해서 try{}finally{}를 사용했다. (try{}finally{}를 사용하지 않으면 중간에 예외가 발생했을 경우 connection연결을 하되 반납하는 작업을 할 수 없다. )
String sql = "select id, num from test where id = ?";
Connection conn = null;
PreparedStatement pstmt = null;
TestDTO dto = null;
ResultSet rset = null;
try {
conn = ds.getConnection(); //커넥션 하나를 대여 받겠다.
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rset = pstmt.executeQuery();
if(rset.next()){
dto = new TestDTO(rset.getString(1), rset.getInt(2));
}
} finally{
if(rset!=null) rset.close();
if(pstmt!=null) pstmt.close();
if(conn!=null) conn.close();//베이직 데이터 소스에 있는 것을 close하면 커넥션 풀로 반납한다.(connection만), 나머지는 연결을 끊음(rset, pstmt)
}
return dto;
}
}
package model.dto;
public class TestDTO {
private String id;
private int num;
public TestDTO(String id, int num) {
super();
this.id = id;
this.num = num;
}
public TestDTO() {
super();
// TODO Auto-generated constructor stub
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "TestDTO [id=" + id + ", num=" + num + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + num;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TestDTO other = (TestDTO) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (num != other.num)
return false;
return true;
}
}
'프로그래밍 > JSP Programming' 카테고리의 다른 글
2012-5-10 Connection Pool과 DataSource (0) | 2012.05.10 |
---|---|
2012-5-10 MVC를 이용한 회원 등록하기 (0) | 2012.05.10 |
2012-5-10 ConnectionPool (0) | 2012.05.10 |
2012-5-10 model2를 이용한 계산기 에러잡기 (0) | 2012.05.10 |
2012-5-9 MVC패턴을 이용한 계산기 [실습] (0) | 2012.05.09 |