0503) VO타입 대신 HashMap타입을 사용

권원중·2023년 5월 3일
0

구디아카데미

목록 보기
9/23
 SELECT local_name localName, '대한민국' conuntry,'홍길동' worker
 FROM local LIMIT 0, 1;

다음의 쿼리 결과를(select결과에 컬럼값 외 다른 정보가 추가된) 출력하고 한다면 기본적인 VO를 사용할 수가 없다(매번 새로운 VO를 만들어 사용하는건 너무 많은 VO를 만들게 된다)

HashMap 예시

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "java.net.*" %>
<%@ page import = "vo.*" %>
<%@ page import = "java.util.*" %>
<%
	String driver="org.mariadb.jdbc.Driver";
	String dbUrl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbId = "root"; 
	String dbPw = "java1234";
	Class.forName(driver);
	Connection conn = null;
	PreparedStatement stmt = null;
	
	ResultSet rs = null;
	conn = DriverManager.getConnection(dbUrl,dbId, dbPw);
	/*
	 SELECT local_name localName, '대한민국' conuntry,'박성환' worker
	 FROM local 
	 LIMIT 0, 1;
	*/
	String sql =" SELECT local_name localName, '대한민국' conuntry,'박성환' worker FROM local LIMIT 0, 1;";
	stmt = conn.prepareStatement(sql);
	rs = stmt.executeQuery();
	// 부여 타입 대신에 HashMap 타입을 사용 Map 중한 하나인 HashMap
	
	HashMap<String, Object> map = null;//ArrayList와 다르게 여러타입이 들어온다. 하나는 키를 사용할것 하나느 값 Object는 모든 참조타입이 들어올수있다.
	if(rs.next()){ 
		// 디버깅
		//System.out.println(rs.getString("localName"));
		//System.out.println(rs.getString("conuntry"));
		//System.out.println(rs.getString("worker"));
		map = new HashMap<String, Object>();
		map.put("localName", rs.getString("localName"));// put 사용하기
		map.put("conuntry", rs.getString("conuntry")); // map.put(키이름, 값)
		map.put("worker", rs.getString("worker"));
	}
	System.out.println(map.get("localName")); // object로 하였기 때문에 형변환까지 해야된다((String)map.get("localName"));
	
	
	PreparedStatement stmt2 = null;
	ResultSet rs2 = null;
	String sql2 =" SELECT local_name localName, '대한민국' conuntry,'박성환' worker FROM local";
	stmt2 = conn.prepareStatement(sql2);
	rs2 = stmt2.executeQuery();
	ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>> ();
	while(rs2.next()){ // 행이 여러개이므로 어레이 리스트를 활용하여 와일문을 열어서 반복하여 만들었다.
		HashMap<String, Object> m = new HashMap<String, Object>();
		m.put("localName", rs2.getString("localName"));// put 사용하기
		m.put("conuntry", rs2.getString("conuntry")); // map.put(키이름, 값)
		m.put("worker", rs2.getString("worker"));
		list.add(m);
	}
	
	PreparedStatement stmt3 = null;
	ResultSet rs3 = null;
	String sql3 =" SELECT local_name localName, count(local_name) cnt FROM  board GROUP BY local_name";
	stmt3 = conn.prepareStatement(sql3);
	rs3 = stmt3.executeQuery();
	ArrayList<HashMap<String, Object>> list3 = new ArrayList<HashMap<String, Object>> ();
	while(rs3.next()){ // 행이 여러개이므로 어레이 리스트를 활용하여 와일문을 열어서 반복하여 만들었다.
		HashMap<String, Object> m3 = new HashMap<String, Object>();
		m3.put("localName", rs3.getString("localName"));// put 사용하기
		m3.put("cnt", rs3.getInt("cnt")); // map.put(키이름, 값)
		list3.add(m3);
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>localListByMap.jsp</title>
</head>
<body>
	<table>
		<tr>
			<td>localName</td>
			<td>conuntry</td>
			<td>worker</td>
		</tr>
		<%
			for(HashMap<String, Object> m : list){
		%>
				<tr>
					<td><%=m.get("localName") %></td>
					<td><%=m.get("conuntry") %></td>
					<td><%=m.get("worker") %></td>
				</tr>
		<% 
			}
		%>
	</table>
	
	<hr>
	
	<ul>
	
		<%
			for(HashMap<String, Object> m3 : list3){
		%>
			<li>
				<a href= "">
					<%=(String)m3.get("localName")%>(<%=(Integer)m3.get("cnt")%>)</a>
			</li>
		<%
			}
		%>
	</ul>
</body>
</html>

0개의 댓글