본문 바로가기
웹 프로그래밍(풀스택-->java)/웹프로그래밍(백엔드-->java)

22. Jsp와 데이터베이스 연동 7

by 백엔드개발자0107 2021. 11. 30.

자, 요번시간에는 데이터베이스 연동,memberInfo를 작성해볼것이다.

 

자 저번시간에는 게시판의 글보기까지 공부해보았다.

 

--> 이 정도 까지 저번시간에 공부해보았다고 생각하면 될듯하다.

 

자 이떄 우리가 할것은 만약 위 아이디를 클릭하게 되면 상세보기로 넘어가서 ,

 

더 자세히 공부할수 있게끔 하였다.

 

 	<td align="center" width="150"> <a href="MemberInfo.jsp?id=<%=bean.getId()%>" > <%=bean.getId() %></a> </td>

자 여기서보면 a태그에다가

"MemberInfo.jsp?id=<%=bean.getId()%>" 이런식으로 ?뒤에 id값을 넣음으로써 get방식으로 연동시켰다..!

 

자 그렇다면, 위에서 아이디를 클릭해서 상세보기로 넘어가기 위해서, 한클래스의 MemberBean을 받아보자..!

  

  <%

  MemberDAO mdao = new MemberDAO();

  

  //자, 여러개의 MemberBean이 모인 가변길이의 클래스집합은 Vector로 받지만,

  //자 ,한개의 클래스는 MemberBean으로 만 받는다.

  

 MemberBean mbean = mdao.oneSelectMember();

  %>

 

MemberInfo.jsp

 

<%@page import="model.MemberBean"%>
<%@page import="model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!--
		0. memberList에서 넘긴 id를 받아줌. 
	    1. 데이터베이스에서 한 회원의 정보를 가져온다. 
  -->
  
  <%
  String id = request.getParameter("id");
  //MemberList에서 넘긴 , id값을받아오는것이다. 
  MemberDAO mdao = new MemberDAO();
  
  //자, 여러개의 MemberBean이 모인 가변길이의 클래스집합은 Vector로 받지만,
  //자 ,한개의 클래스는 MemberBean으로 만 받는다.
  
  //두사람부터는 무조건 벡터쓴다. 
  
  MemberBean mbean = mdao.oneSelectMember(id);
  
  
  %>
<!-- 		2. 테이블 태그를 이용하여 화면에 회원의 정보를 출력 
 -->

<center>

<h2>회원정보보기 </h2>
<table width="400" border ="1">
<tr height="50">
<td align="center" width="150">아이디 </td>
<td align="center" width="250"><%=mbean.getId()%> </td>
</tr>
<tr height="50">
<td align="center" width="150">이메일  </td>
<td align="center" width="250"><%=mbean.getEmail()()%> </td>
</tr>
<tr height="50">
<td align="center" width="150">전화번호  </td>
<td align="center" width="250"><%=mbean.getTel()%> </td>
</tr>
<tr height="50">
<td align="center" width="150">취미  </td>
<td align="center" width="250"><%=mbean.getHobby()%> </td>
</tr>
<tr height="50">
<td align="center" width="150">직업  </td>
<td align="center" width="250"><%=mbean.getJob()%> </td>
</tr>
<tr height="50">
<td align="center" width="150">나이  </td>
<td align="center" width="250"><%=mbean.getAge()%> </td>
</tr>
<tr height="50">
<td align="center" width="150">정보  </td>
<td align="center" width="250"><%=mbean.getInfo()%> </td>
</tr>
</table>
</center>


</body>
</html>

자 위 코드들을 주의깊게 보도록 한다.

 

MemberList.jsp

 

<%@page import="model.MemberBean"%>
<%@page import="java.util.Vector"%>
<%@page import="model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- 1. 데이터베이스에서 모든 회원의 정보를 가져온다. 
		2. 테이블 태그를 이용하여 화면에 회원들의 정보를 출력 
  -->

<%
	MemberDAO mdao = new MemberDAO();

	//멤버dao클래스가 오라클에 접속해서 정보를 가지고 올것이다. 하지만 한사람에 대한 정보는 자바빈클래스 MemberBean에다가 넣기로 하였다.
	//즉 한사람에 대한 정보는 memberBean에 넣을수가 있다.
	//결론은 memberbean에 있는 내용을 저장해줄 클래스를 또 만들어야만 한다.
	//배열도 가능하다, object클래스인 배열은 모든 클래스의 최상위 루트이기 떄문에
	// 어떠한 값도 대입가능하다.
/* 	단 배열은 단점이 있다. 배열은 처음부터 길이를 정해주어야한다.
	즉 레코드의 갯수를 모를수 있다.
	그래서, 사용하는 가변길이 클래스가 바로 Vector클래스이다. */
	/* 
	Vector의 배열과의 차이점은 바로 가변길이라는 정해진길이가 아닌 가변이다. 즉 늘어놨다줄어졌다 라는 점이다..
	그래서 Arraylist나Vector를 사용할것인데, 나는 Vector를 추천할것이다. */
	
	
	//회원들의 정보가 얼마나 저장되어있는지 모르기에 가변길이인 Vector를 이용하여 저장해줌 
	Vector<MemberBean> vec = mdao.allSelectMember();
	
	
%>

<center>
<h2>모든 회원정보보기 </h2>

<table width="800" border = "1">
 	<tr height="50">
 	<td align="center" width="150">아이디 </td>
 	<td align="center" width="250">이메일  </td>
 	<td align="center" width="200">전화번호  </td>
 	<td align="center" width="200">취미  </td>
 	</tr>
</table>
<%
	for(int i = 0;i<vec.size();i++){
		MemberBean bean = vec.get(i);//벡터에 담긴 빈클래스를 하나씩 추출 
		%>
		<tr height="50">
 	<td align="center" width="150"> <a href="MemberInfo.jsp?id=<%=bean.getId()%>"></a> <%=bean.getId() %> </td>
 	<td align="center" width="250"><%=bean.getEmail() %>  </td>
 	<td align="center" width="200"><%=bean.getTel() %>  </td>
 	<td align="center" width="200"><%=bean.getHobby() %>  </td>
 	</tr>
		<% 
		
	}
%>

</center>
</body>
</html>

 

MemberDAO.class

 

package model;

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


//오라클 데이터베이스에 연결하고 select,insert,update,delete작업을 실행해주는 메소드이다. 
public class MemberDAO {

	String id = "root";
	String pass = "Dahyon0107!";
	String url = "jdbc:mysql://localhost:3306/sys";//접속 url 

	Connection con; //데이터베이스에 접근할수 있도록 설정 
	PreparedStatement pstmt;//데이터베이스에서 쿼리를 실행시켜주는 객체 
	ResultSet rs; // 데이터베이스의 테이블의 결과 리턴받아 자바에 저장해주는 객체 
	
		
	//데이터베이스(mysql)에 접근할수 있도록 도와주는 메소드
	public void getCon() {
			
		try {
			
			//1.해당 데이터베이스를 사용한다고 선언 (클래스를 등록= 오라클용을 사용 )
			Class.forName("com.mysql.jdbc.Driver");
			//2.해당 데이터베이스에 접속 
			con = DriverManager.getConnection(url,id,pass);
			
			
			
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		
	}
	
	//데이터 베이스에 한사람의 회원 정보를 저장해주는 메소드 
	public void insertMember(MemberBean mbean) {
		

try{
	
	getCon();
	
	//3. 접속후 쿼리준비하여 쿼리를 사용하도록 설정 
	String sql = "insert into member values(?,?,?,?,?,?,?,?)";
	//4. 쿼리를 사용하도록 설정 
	PreparedStatement pstmt  = con.prepareStatement(sql);//jsp에서 쿼리를 사용하도록 설정 
	//5. ?에 맞게 데이터를 맵핑 
	pstmt.setString(1,mbean.getId());
	pstmt.setString(2,mbean.getPass1());
	pstmt.setString(3,mbean.getEmail());
	pstmt.setString(4,mbean.getTel());
	pstmt.setString(5,mbean.getHobby());
	pstmt.setString(6,mbean.getJob());
	pstmt.setString(7,mbean.getAge());
	pstmt.setString(8,mbean.getInfo());
	
	pstmt.executeUpdate();//insert,update,delete시 사용하는 메소드 
	
	//5. 자원 반납 
	con.close();
	
}catch(Exception e){
	e.printStackTrace();
	
}
		
	}
	
	//모든 회원의 정보를 리턴해주는 메소드 호출 
	public Vector<MemberBean> allSelectMember(){
		
		
		Vector<MemberBean> v = new Vector<MemberBean>();
		
		
		//무조건 데이터베이스는 예외처리를 반드시 해야합니다.
		
		try {
			
			//커넥션 연결
			getCon();
			
			//쿼리 준비 
			String sql ="select * from sys.member";
			//쿼리를 실행시켜주는 객체 선언 
			pstmt = con.prepareStatement(sql);
			//4. 결과를 실행시킨 결과를 리턴해서 받아줌(오라클 테이블의 검색된 결과를 자바객체에 저장)
			rs = pstmt.executeQuery();//결과적으로 resultSet에 데이터가 저장이 되어있다는 것이다.
			//반복문을 사용해서 rs에 저장된 데이트를 추출해놓아야한다. 
			while(rs.next()) { //저장된 테이터만큼까지 반복문을 돌리겠다라는 뜻이다.
				
				MemberBean bean = new MemberBean();//컬럼으로 나뉘어진 데이트를 빈클래스에 저장 
				bean.setId(rs.getString(1));//안드로이드에서는 0 자바에서는 1부터 시작한다.
				bean.setPass1(rs.getString(2));
				bean.setEmail(rs.getString(3));
				bean.setTel(rs.getString(4));
				bean.setHobby(rs.getString(5));
				bean.setJob(rs.getString(6));
				bean.setAge(rs.getString(7));
				bean.setInfo(rs.getString(8));
				//자 ,패키징된 멤버빈클래스를 벡터에 저장 
				v.add(bean);//0번지부터 순서대로 데이터가 저장 
			}
			
			// 자원 반납 
			con.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		// 다 저장된 벡터를 리턴 
		
		return v;
	}
	
	//한사람에 대한 정보를 리턴하는 메소드 작성 
	public MemberBean oneSelectMember(String id) {
		
		 MemberBean bean =  new MemberBean();

		 try {
			//커넥션연결 
			 getCon();
			 //쿼리준비 
			 String sql = "select * from member where id = ?";
			 //한사람에 대한  정보를 리턴할때 그 사람에대한 pk 값 id값을 넘겨주어야만 한다.
			 pstmt = con.prepareStatement(sql);
			 //?에 값을 맵핑 
			 pstmt.setString(1, id);
			 //쿼리 실행 
			 rs = pstmt.executeQuery();
			 if(rs.next()) {//레코드가 있다면, 
				 
					bean.setId(rs.getString(1));//안드로이드에서는 0 자바에서는 1부터 시작한다.
					bean.setPass1(rs.getString(2));
					bean.setEmail(rs.getString(3));
					bean.setTel(rs.getString(4));
					bean.setHobby(rs.getString(5));
					bean.setJob(rs.getString(6));
					bean.setAge(rs.getString(7));
					bean.setInfo(rs.getString(8));
				 
			 }
			 
			 
			con.close();
			 
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		 
		
	}
	
	//리턴
	return bean;
	
	
}

코드들을 주의깊게 보자!!!!(특히 주석처리 잘보자)