갈림길 이정표

[JSP] Bean으로 DB 연결 (feat. 향상된 for문) 본문

Programming Language/Servlet & JSP

[JSP] Bean으로 DB 연결 (feat. 향상된 for문)

이몽뇽 2020. 8. 26. 19:54

※ 주의! ApacheTomcat의 Dynamic Web Project에는 기본적으로 JDBC를 지원 안하기 때문에 WEB-INF > lib 폴더에 mariadb-java-client-1.3.6.jar 파일을 꼭 복사시켜 놔야 된다.

mariadb를 제외한 파일들은 없어도 상관없지만 Tomcat 보안으로 인한 HTTP 500 에러를 확실하게 안뜨게 하고 싶다면 복사해 놓는 것 추천.

 

DB자료 데이터를 DTO class로 받은 후

DTO(각 멤버들)를 ArrayList에 담아 놓은 후

더보기

DTO (맵핑을 하기위한 그릇)

[SangpumDTO.java]

package pack2;

public class SangpumDTO {
	private String code, sang, su, dan;

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getSang() {
		return sang;
	}

	public void setSang(String sang) {
		this.sang = sang;
	}

	public String getSu() {
		return su;
	}

	public void setSu(String su) {
		this.su = su;
	}

	public String getDan() {
		return dan;
	}

	public void setDan(String dan) {
		this.dan = dan;
	}
}

 

[ConnDbBean.java]

package pack2;
//lib에 [el-api,jsp-api,servlet-api] 복사함

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

public class ConnDbBean {
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;

	public ConnDbBean() {
		try { // 드라이버로딩
			Class.forName("org.mariadb.jdbc.Driver");
		} catch (Exception e) {
			System.out.println("ConnDbBean err: " + e);
		}
	}

	public ArrayList<SangpumDTO> getDataAll() {
		ArrayList<SangpumDTO> list = new ArrayList<SangpumDTO>();

		try {
			// DB연결
			conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "369369");
			pstmt = conn.prepareStatement("SELECT * FROM sangdata");
			rs = pstmt.executeQuery();
			
			while(rs.next()){
				SangpumDTO dto = new SangpumDTO();
				dto.setCode(rs.getString("code"));
				dto.setSang(rs.getString("sang"));
				dto.setSu(rs.getString("su"));
				dto.setDan(rs.getString("dan"));
				list.add(dto);	//DB를 DTO type(그냥 변수에 값부여)로 받아옴 → DTO를 list 로 받아옴(ArrayList type)
			}
		} catch (Exception e) {
			System.out.println("getDataAll err: " + e);
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e2) {
		
			}
		}
		return list;
	}
}

다시 ArrayList를 DTO타입 형태로 불러옴

(위에는 for문을, 밑에는 향상된 for문을 쓴 결과 이다.)

[beansDB1.jsp]

<%@page import="pack2.SangpumDTO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="cdb" class="pack2.ConnDbBean"/>	<%-- Singleton 패턴 --%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>* 상품자료(beans 사용) *</h2>
<table border='1'>
	<tr><td>코드</td><td>품명</td><td>수량</td><td>단가</td></tr>
	<%
	ArrayList<SangpumDTO> list = cdb.getDataAll();
	
	for(int i = 0; i < list.size(); i++){
		SangpumDTO dto = (SangpumDTO)list.get(i);	//list를 DTO타입으로 다시 불러옴 (대신 Casting 필요. 더 작은 개념이라서)
	%>
	<tr>
		<%--<td><% out.print(dto.getCode()); %>--%>
		<td><%=dto.getCode() %>
		<td><%=dto.getSang() %>
		<td><%=dto.getSu() %>
		<td><%=dto.getDan() %>
	</td>
	<%
	
	}
	%>
</table>
<br>
<table border="1">
	<tr><td>코드</td><td>품명</td><td>수량</td><td>단가</td></tr>
	<%
	for(SangpumDTO s:list){
	%>
	<tr>
		<td><%=s.getCode() %>
		<td><%=s.getSang() %>
		<td><%=s.getSu() %>
		<td><%=s.getDan() %>
	</td>
	<%	
	}
	%>
</table>
</body>
</html>

향상된 for문 [Enhanced For Loop] (더 알아보기)

더보기
for ( declaration : expression ) {
// statement(s)
}
for ( String obj : array ) {
// statement(s)
}
for ( Class타입명 변수명 : array ) {
// statement(s)
}

 array[0], array[1], array[2], ....가면서 i < array.size( )가 될 때까지

obj변수가 이용된 { }안의 모든 statement(s) 를 반복

'Programming Language > Servlet & JSP' 카테고리의 다른 글

[JSP] beans + dbcp[connection pooling]  (0) 2020.09.02
[JSP] (problem)  (0) 2020.08.26
[JSP] (problem) Form Bean  (0) 2020.08.26
[JSP] 레코드 단위 처리 Bean (Form Bean)  (0) 2020.08.26
[JSP] Bean을 통한 값 전달  (0) 2020.08.26
Comments