겉바속촉

[html] jsp로 DB에 저장하기 본문

IT일기(하반기)/블록체인

[html] jsp로 DB에 저장하기

겉바속촉 2020. 6. 17. 16:57
728x90
반응형

우선 DTO랑 DAO개념들 잡고 갈게요:)

 


DTO(Data Transfer Object)

:특정테이블의 정보를 단위별로 정의한 클래스

필수변수와 set,get 메소드만 으로 이루어짐

 

DAO(Data Access Object)

:데이타 베이스에 접속, 명령전송전담클래스(메소드)

 


 

시작하기 전에 포인트는!!!!

 

WEB-INF 에 ojdbc jar를 넣어주셔야합니다:)

1. sequence 생성 후 refresh 해보면 SEQ_INFO 만들어진 것이 보입니다

 

2. DB창에서 테이블 생성

 

3. src에서 info.model 패키지 생성

 

4. infoDAO랑 infoDTO 클래스 생성해주기

 

아까 시작하기 전에 살펴봤던 개념 다시 복기!

 

DTO(Data Transfer Object) ---------> 메소드 만드는 공간

:특정테이블의 정보를 단위별로 정의한 클래스

필수변수와 set,get 메소드만 으로 이루어짐

 

DAO(Data Access Object) ---------> 멤버, setter, getter

:데이타 베이스에 접속, 명령전송전담클래스(메소드)

 

 

5. InfoDTO 클래스 코드 작성

package info.model;

import java.sql.Timestamp;

public class InfoDTO {
	
	private String num;
	private String name;
	private String addr;
	private Timestamp sdate;
	
	
	///setter, getter
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public Timestamp getSdate() {
		return sdate;
	}
	public void setSdate(Timestamp sdate) {
		this.sdate = sdate;
	}

}

여기서 sdate는 String 아님 주의

---> Timest...까지 치고 자동완성해서 뜨는 Timestamp-java.sql로 클릭

 

 

getters and setters 자동생성

 

select all

다음과 같이 자동완성 됩니다

 

 

 

6. infoDAO 코드 작성해주기

주소들은 디비에 가서 복사해주기

 

 

 

  • 생성자 만들기 -> try-catch사용해서 
  • connection 만들기
  • insert 만들기
  • select 만들기
  • main부분 완성 -> 객체생성
  • 컴파일시 오라클 드라이버 성공이라고 뜨면 ok

 

다음은 완성된 전체 코드

package info.model;

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

public class InfoDAO {
	
	
	String driver="oracle.jdbc.driver.OracleDriver";
	String url="jdbc:oracle:thin:@localhost:1521:XE";
	
	//생성자
	public InfoDAO() {
		try {
			Class.forName(driver);
			System.out.println("오라클드라이버 성공");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("오라클드라이버 실패");
			
		}
	}
	////////////connection
	public Connection getConnection()
	{
		Connection conn=null;
		
		try {
			conn=DriverManager.getConnection(url, "gutba", "sokchock");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("커넥션실패");
		}
		
		return conn;
	}
	
	////////insert
	public void infoInsert(InfoDTO dto)
	{
		Connection conn=null;
		PreparedStatement pstmt=null;
		
		String sql="insert into info values(seq_info.nextval,?,?,sysdate)";
		
		conn=getConnection();
		try {
			pstmt=conn.prepareStatement(sql);
			//??에 대한 바인딩
			pstmt.setString(1, dto.getName());
			pstmt.setString(2, dto.getAddr());
			
			//update
			pstmt.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	///////////////select
	public Vector<InfoDTO> getAllDatas()
	{
		Vector<InfoDTO> list=new Vector<InfoDTO>();
		
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		
		String sql="select * from info order by num asc";
		
		conn=getConnection();
		try {
			pstmt=conn.prepareStatement(sql);
			rs=pstmt.executeQuery();
			
			//여러개의 데이터를 얻는 경우 while
			while(rs.next())
			{
				//반드시 while문안에서 선언
				InfoDTO dto=new InfoDTO();
				
				dto.setNum(rs.getString("num"));
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
				dto.setSdate(rs.getTimestamp("sdate"));						
			
				//벡터에 추가
				list.add(dto);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				rs.close();
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return list;
	}
	
	public static void main(String[] args) {
		
		InfoDAO dao=new InfoDAO();
		
	}

}

 


 

 

혹시 드라이버 연결했는 데

빨간 줄이 뜨시는 경우

 

우클릭-bild Path-configure build path...클릭

 

classpath 클릭- Add External JARs..클릭 - ojdbc추가

 

 


 

 

7. 폴더 하나 생성한 후에

 그 안에다가 jsp파일 3개 생성해주기

 

 

infoForm.jsp -> 실행되었을 때 우리가 정보를 입력할 수 있는 페이지

                      그래서 컬럼명과 동일하게 잘 넣어주셔야 합니다.

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

</head>
<body>
	<form action="infoAction.jsp" method="post">
		<table class="table table-bordered">
			<tr>
				<th>이름</th>
				<td>
					<input type="text" name="name" size="7"
					placeholder="이름">
				</td>
			</tr>
			<tr>
				<th>주소</th>
				<td>
					<input type="text" name="addr" size="20"
					placeholder="주소">
				</td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="전송">
					<input type="button" value="목록"
					onclick="location.href='infoList.jsp'">
				</td>
			</tr>
			
		</table>
	</form>

</body>
</html>

 

infoAction.jsp -> 이제 우리가 입력한 값들이 db에 저장되도록 하는 과정

<%@page import="info.model.InfoDAO"%>
<%@page import="info.model.InfoDTO"%>
<%@ 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>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

</head>
<body>

<%

//1.파라메타 값 받기(엔코딩)
request.setCharacterEncoding("utf-8");

String name=request.getParameter("name");
String addr=request.getParameter("addr");


//2.입력데이타를 dto로 묶어서
InfoDTO dto=new InfoDTO();

dto.setName(name);
dto.setAddr(addr);



//3.메소드로 전달
InfoDAO dao=new InfoDAO();
dao.infoInsert(dto);


//4.출력jsp로 이동...url주소바뀜
response.sendRedirect("infoList.jsp");

%>

</body>
</html>

여기까지 만들어주신 후에

퀀텀 db확해주셔야 합니다

내가 입력한 값이 테이블에 잘 들어가는지 말이쥬!!

 

 

infoList.jsp -> 테이블이 뜨는 곳

 

<%@page import="info.model.InfoDTO"%>
<%@page import="java.util.Vector"%>

<%@page import="info.model.InfoDAO"%>
<%@ 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>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

</head>
<body>
<%
InfoDAO dao=new InfoDAO();
Vector<InfoDTO>list=dao.getAllDatas();

%>
<a href="infoForm.jsp">데이터추가</a>
<hr>
<table class="table table-bordered">
	<caption>info리스트출력</caption>
	<tr>
		<th width="50">번호</th>
		<th width="70">이름</th>
		<th width="150">주소</th>
		<th width="250">현재날짜</th>
		<th>수정/삭제</th>	
	</tr>
	<%
	for(int i=0;i<list.size();i++)
	{
		InfoDTO dto=list.get(i);
		%>
		
		<tr>
			<td><%=i+1 %></td>
			<td><%=dto.getName() %></td>
			<td><%=dto.getAddr() %></td>
			<td><%=dto.getSdate() %></td>
			<td><a>수정</a>/<a>삭제</a></td>
		</tr>
	<%}
	%>
</table>
</body>
</html>

 

컴파일해보시면

다음과 같이 뜹니다:)

이름이랑 주소 입력한 후에 전송 버튼 눌러주시면

테이블이 뜨게될거에요

그렇다면 성공!^^!

 

 

그런데ㅠㅠ

너무 복잡하기 때문에 분할해서 살펴보도록 할게요

전체적인 구조를 먼저 이해해주시고 

그 다음 하나하나 다시 살펴보신다면 원활해지실거에유:)

 

 

 

 

728x90
반응형

'IT일기(하반기) > 블록체인' 카테고리의 다른 글

[html] jsp로 DB에 저장하기 2  (2) 2020.06.22
[html] jsp로 DB에 저장하기-수정,삭제  (2) 2020.06.18
Tomcat 설치하기  (0) 2020.06.09
my SQL 다운로드  (0) 2020.06.08
[SQL] 테이블 연습  (0) 2020.06.05