겉바속촉
[html] jsp로 DB에 저장하기 본문
우선 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>
컴파일해보시면
다음과 같이 뜹니다:)
이름이랑 주소 입력한 후에 전송 버튼 눌러주시면
테이블이 뜨게될거에요
그렇다면 성공!^^!
그런데ㅠㅠ
너무 복잡하기 때문에 분할해서 살펴보도록 할게요
전체적인 구조를 먼저 이해해주시고
그 다음 하나하나 다시 살펴보신다면 원활해지실거에유:)
'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 |