반응형
DBService
package service;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DBService {
// single-ton pattern : 객체 1개만 생성해서 사용하자
static DBService single = null;
DataSource ds = null;
public static DBService getInstance() {
// 없으면 생성해라
if (single == null) {
single = new DBService();
}
return single;
}
private DBService() {
try {
// JNDI를 이용해서 DataSource정보를 얻어온다
// 1. InitialContext 생성(JNDI->interface 추출객체)
InitialContext ic = new InitialContext();
// 2. Context정보 얻어온다(look up 함수가 Object랑 연관되어 있어서 Casting 해주었음)
Context context = (Context) ic.lookup("java:comp/env");
// 3. naming을 이용해서 DataSource 얻어온다
ds = (DataSource) context.lookup("jdbc/oracle_test");
// 2+3 한번에
// ds = (DataSource) ic.lookup("java:comp/env/jdbc/oracle_test");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//end:DBService()
public Connection getConnection() throws SQLException {
// DataSource를 이용해서 BasicDataSource가 관리하고 있는 Connection을 요청
return ds.getConnection();
}
}
Vo
package db.vo;
public class SawonVo {
int sabun;
String saname;
String sasex;
int deptno;
String sajob;
String sahire;
int samgr;
int sapay;
public int getSabun() {
return sabun;
}
public void setSabun(int sabun) {
this.sabun = sabun;
}
public String getSaname() {
return saname;
}
public void setSaname(String saname) {
this.saname = saname;
}
public String getSasex() {
return sasex;
}
public void setSasex(String sasex) {
this.sasex = sasex;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getSajob() {
return sajob;
}
public void setSajob(String sajob) {
this.sajob = sajob;
}
public String getSahire() {
return sahire;
}
public void setSahire(String sahire) {
this.sahire = sahire;
}
public int getSamgr() {
return samgr;
}
public void setSamgr(int samgr) {
this.samgr = samgr;
}
public int getSapay() {
return sapay;
}
public void setSapay(int sapay) {
this.sapay = sapay;
}
}
Dao
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import db.vo.SawonVo;
import service.DBService;
public class SawonDao {
// single-ton pattern : 객체 1개만 생성해서 사용하자
static SawonDao single = null;
public static SawonDao getInstance() {
// 없으면 생성해라
if (single == null) {
single = new SawonDao();
}
return single;
}
private SawonDao() {
}
public List<SawonVo> selectList() {
List<SawonVo> list = new ArrayList<SawonVo>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "select * from sawon";
try {
// 1. Connection 얻어오기
conn = DBService.getInstance().getConnection();
// 2. PreparedStatement
pstmt = conn.prepareStatement(sql);
// 3. ResultSet 얻어오기(킵해놨던 sql문 출력하기)
rs = pstmt.executeQuery();
while (rs.next()) {
// 1. rs가 가리키는 레코드의 값을 읽어온다
// 2. 저장객체 생성 -> 레코드에서 읽은 값을 넣는다.
SawonVo vo = new SawonVo();
// rs가 가리키는 레코드값을 VO에 넣는다.
vo.setSabun(rs.getInt("sabun"));
vo.setSaname(rs.getString("saname"));
vo.setSasex(rs.getString("sasex"));
vo.setDeptno(rs.getInt("deptno"));
vo.setSajob(rs.getString("sajob"));
vo.setSahire(rs.getString("sahire"));
vo.setSamgr(rs.getInt("samgr"));
vo.setSapay(rs.getInt("sapay"));
// ArrayList에 추가
list.add(vo);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
// 예외 처리에서 무조건 실행되는 부분
// 마무리 작업(열린역순으로 닫기)
// 한 번에 잡아서 try catch 하기 : alt + shift + s
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
}
}
Servlet
package action;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import dao.SawonDao;
import db.vo.SawonVo;
/**
* Servlet implementation class SawonListAction
*/
@WebServlet("/sawon/list.do")
public class SawonListAction extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<SawonVo> list = SawonDao.getInstance().selectList();
request.setAttribute("list", list);
String forward_page = "sawon_list.jsp";
RequestDispatcher disp = request.getRequestDispatcher(forward_page);
disp.forward(request, response);
}
}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<style type="text/css">
#box {
width: 600px;
margin: auto;
margin-top: 50px;
}
.mycolor {
background: #333333;
color: white;
}
</style>
</head>
<body>
<div id ="box">
<table class="table-hover">
<tr class="mycolor">
<th>사원번호</th>
<th>사원이름</th>
<th>성별</th>
<th>번호</th>
<th>직업</th>
<th>입사날짜</th>
<th>상사</th>
<th>연봉</th>
</tr>
<c:forEach var="vo" items="${ requestScope.list }">
<tr>
<td>${ pageScope.vo.sabun }</td>
<td>${ pageScope.vo.saname }</td>
<td>${ pageScope.vo.sasex }</td>
<td>${ vo.deptno }</td>
<td>${ vo.sajob }</td>
<td>${ fn:substring(vo.sahire,0,10) }</td>
<td>${ vo.samgr }</td>
<td><fmt:formatNumber type="currency" value="${ vo.sapay*10000 }"/> </td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
DeptVo에서 한 가지 데이터만 출력할 때(selectOne)
// 하나의 정보만 가져올 때 (where 사용해서 ex)deptno=10)
public DeptVo selectOne(int deptno) {
DeptVo vo = null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "select * from dept where deptno=?";
try {
// 1. Connection 얻어오기
conn = DBService.getInstance().getConnection();
// 2. PreparedStatement
pstmt = conn.prepareStatement(sql);
// 3. pstmt parameter index 채우기
pstmt.setInt(1, deptno);
// 4. ResultSet 얻어오기(킵해놨던 sql문 출력하기)
rs = pstmt.executeQuery();
// while문을 사용해도 되지만, 공회전이 1회더 발생한다.
if (rs.next()) {
// 1. rs가 가리키는 레코드의 값을 읽어온다
// 2. 저장객체 생성 -> 레코드에서 읽은 값을 넣는다.
vo = new DeptVo();
// rs가 가리키는 레코드값을 VO에 넣는다.
vo.setDeptno(rs.getInt("deptno"));
vo.setDname(rs.getString("dname"));
vo.setLoc(rs.getString("loc"));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
// 예외 처리에서 무조건 실행되는 부분
// 마무리 작업(열린역순으로 닫기)
// 한 번에 잡아서 try catch 하기 : alt + shift + s
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return vo;
}
package action;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import dao.DeptDao;
import db.vo.DeptVo;
/**
* Servlet implementation class DeptListAction
*/
@WebServlet("/dept/list.do")
public class DeptListAction extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 부서데이터 가져오기(DeptDao -> DBService)
//List<DeptVo> list = DeptDao.getInstance().selectList();
DeptVo vo = DeptDao.getInstance().selectOne(10);
// request binding(list에 가져온 데이터 request에 저장)
request.setAttribute("vo", vo);
// 이로써, 현재 이 class와 dept_list와 list가 공유되어 있다.
// Dispatcher형식으로 호출
// webapp/dept/폴더내에 dept_list.jsp 생성
String forward_page = "dept_list.jsp";
RequestDispatcher disp = request.getRequestDispatcher(forward_page);
disp.forward(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<style type="text/css">
#box {
width: 600px;
margin: auto;
margin-top: 50px;
}
table {
/* !important : 충돌시 우선적용하겠다 */
border: 2px solid blue !important;
}
.mybtn{
background: blue;
}
</style>
</head>
<body>
<button type="button" class="btn btn-outline-secondary mybtn">Action</button>
<div id="box">
<table class="table table-bordered table-hover">
<tr class="success">
<th>부서번호</th>
<th>부서명</th>
<th>위치</th>
</tr>
<!-- DeptListAction와 request의 데이터 창고가 공유되어 있다. -->
<!-- for(DeptVo vo : list) 동일함. -->
<tr>
<td>${ vo.deptno }</td>
<td>${ vo.dname }</td>
<td>${ vo['loc'] }</td>
</tr>
</table>
</div>
</body>
</html>
반응형
'데이터베이스↗' 카테고리의 다른 글
xml로 데이터를 가져와서 parsing까지 하기 (0) | 2024.07.08 |
---|---|
JDBC 방명록 작성 (CRUD) (0) | 2024.06.20 |
[오류해결]Server Tomcat v10.1 Server at localhost failed to start. (0) | 2024.06.19 |
善DataBase JDBC(웹사이트 데이터 가져오는 경로까지) (0) | 2024.06.19 |
java JDBC (0) | 2024.05.29 |