2022.01.19 - [멀티캠퍼스 풀스택 과정/데이터베이스] - 데이터베이스2-1 JDBC로 JAVA와 DB의 연동(SELECT문)
2022.01.19 - [멀티캠퍼스 풀스택 과정/데이터베이스] - 데이터베이스2-3 JDBC로 JAVA와 DB의 연동(INSERT문)
시작하기 전에 연동하는 거 복습 다시 해야 이해가 간다...(DB 다시 복습)
1. Workbench 실행해서 DB table 불러오기
(비밀번호 root1106..)
SHOW DATABASES;
USE demo;
SHOW TABLES;
SELECT * FROM emp;
2. 사원등록 form을 보여줄 index.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.jsp</title>
</head>
<body>
<h3>사원등록 form</h3>
<!-- a href -> "webJSP/J02_response_jdbc/empForm.jsp"-->
<a href="<%=request.getContextPath()%>/J02_response_jdbc/empForm.jsp">사원등록</a>
</body>
</html>
3. 사원등록 form인 empForm.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empForm.jsp</title>
</head>
<body>
<!--webJSP/J02_response_jdbc/empFormOk.jsp -->
<form method="post" action="<%=request.getContextPath()%>/J02_response_jdbc/empFormOk.jsp">
<!-- 서버로 갈 데이터 name을 선언할 때는 DB에 있는 필드명과 동일하게 한다. -->
사원번호 : <input type="text" name="empno"/><br/>
사원명 : <input type="text" name="ename"/><br/>
연봉 : <input type="text" name="sal"/><br/>
부서코드 : <input type="text" name="deptno"/><br/>
<br/>
<input type="submit" value="사원등록"/>
</form>
</body>
</html>
4. 사원등록을 DB TABLE에 추가하기 위해 DB 연동 파일인 empFormOk.jsp 생성
4-0. 이름이 있기 때문에 한글 인코딩 먼저
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
4-1. 폼의 데이터를 서버로 가져오기 : request
변수의 타입을 정할 때는 DB의 필드의 데이터 타입에 맞춰서 하는 게 좋음
<%
//1. 폼의 데이터를 서버로 가져오기 : request
// DB의 데이터타입과 맞추기
int empno = Integer.parseInt(request.getParameter("empno"));
String ename = request.getParameter("ename");
int sal = Integer.parseInt(request.getParameter("sal"));
int deptno = Integer.parseInt(request.getParameter("deptno"));
%>
4-2. 드라이브로딩과 DB 연결
드라이브를 로딩하는 것과 DB 연결하는 메서드를 생성해서 메서드 호출하기(선언부에)
import="java.sql.Connection" import="java.sql.DriverManager"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%!
// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
// 드라이브 로딩과 DB연결
public Connection getConnection(){
Connection con = null;
try{ // Driver.class가 있는 파일의 경로
Class.forName("com.mysql.cj.jdbc.Driver");
// 서버IP주소/DB명,계정,비밀번호
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/demo","root","root1106");
}catch(Exception e){
System.out.println("DB연결 에러 발생...");
e.printStackTrace();
}
return con;
}
%>
<%
// 한글 인코딩
//1. 폼의 데이터를 서버로 가져오기
...
// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
Connection conn = getConnection();
%>
4-3. PreparedStatement 객체 만들기(sql): insert쿼리문을 문자열로 하고 값 세팅
쿼리문을 가지고 PreparedStatement 객체를 생성하고 삽입할 쿼리문 값을 세팅한다.
PreparedStatement객체는 conn(Connection 객체)의 prepareStatement 메서드를 통해서 만들기
import="java.sql.PreparedStatement"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%!
// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
// 드라이브 로딩과 DB연결
%>
<%
// 한글 인코딩
//1. 폼의 데이터를 서버로 가져오기
...
// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
...
// 3. PreparedStatement만들기(sql) insert쿼리문을 문자열로
String sql = "INSERT INTO emp(empno, ename, sal, deptno) values(?,?,?,?)";
// PreparedStatement객체는 conn안에있는 prepareStatement 메서드를 통해서 만들기
// values 값이 정해지지 않았기 때문에 값을 세팅해준다.
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, empno);
pstmt.setString(2, ename);
pstmt.setInt(3, sal);
pstmt.setInt(4, deptno);
%>
4-4. 실행
쿼리문을 실행해 추가된 레코드의 수를 반환한다.
exceuteUpdate( )를 사용해 업데이트의 값이 있는지 확인한다.
- insert, delete, update -> executeUpdate() -> int(정수형 데이터) 리턴
- select -> executeQuery() -> ResultSet 객체 리턴
cnt 변수를 만들어서 cnt에 1이 있으면 DB에 레코드 추가 cnt에 0이 있으면 DB에 레코드 추가 실패
response 기본 객체의 sendRedireact메서드
웹 서버가 웹 브라우저에게 다른 페이지로 이동하라고 지시하는 것
response.sendRedirect(location)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%!
// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
// 드라이브 로딩과 DB연결
%>
<%
// 한글 인코딩
//1. 폼의 데이터를 서버로 가져오기
...
// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
...
// 3. PreparedStatement만들기(sql) insert쿼리문을 문자열로
...
// 4.실행
int cnt = pstmt.executeUpdate();
// 결과에 따라 페이지 이동.
if(cnt>0) { // 사원등록성공
// 추가되었으니 다시 홈페이지로 이동 //webSJP/index.jsp
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{ // 사원등록실패
response.sendRedirect("webJSP/J02-_response_jdbc/empFormOk.jsp");
}
%>
4-5. DB닫기
PreparedStatement 객체 Close, Connection 객체 Close
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%!
// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
// 드라이브 로딩과 DB연결
%>
<%
// 한글 인코딩
//1. 폼의 데이터를 서버로 가져오기
...
// 2. DB 연결 (드라이브 로딩이 되어서 DB연결하는 메서드 호출)
...
// 3. PreparedStatement만들기(sql) insert쿼리문을 문자열로
...
// 4.실행
...
// 5. DB닫기
pstmt.close();
conn.close();
%>
5. 결과
성공하게 되면 index.jsp 파일이 열린다.
DB에 가서 데이터가 제대로 들어갔는지 조회하기 (SELECT * FROM emp)
전체코드
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.PreparedStatement" %>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%!
// 선언부에 드라이브를 로딩하는 것과 DB를 연결하는 메서드 생성
public Connection getConnection(){
Connection con = null;
try{ // Driver.class가 있는 파일의 경로
Class.forName("com.mysql.cj.jdbc.Driver");
// 서버IP주소,DB명,계정,비밀번호
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/demo","root","root1106");
}catch(Exception e){
System.out.println("DB연결 에러 발생...");
e.printStackTrace();
}
return con;
}
%>
<%
// 이름이 있기 때문에 한글 인코딩 먼저
request.setCharacterEncoding("utf-8");
// 1. 데이터 가져오기
int empno = Integer.parseInt(request.getParameter("empno"));
String ename = request.getParameter("ename");
int sal = Integer.parseInt(request.getParameter("sal"));
int deptno = Integer.parseInt(request.getParameter("deptno"));
// 2. 드라이브 로딩과 DB연결
Connection conn = getConnection();
// 3. 쿼리문 세팅
String sql = "insert into emp(empno, ename, sal, deptno) values(?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, empno);
pstmt.setString(2, ename);
pstmt.setInt(3, sal);
pstmt.setInt(4, deptno);
// 4.실행
int cnt = pstmt.executeUpdate();
// 결과에 따라 페이지 이동
if(cnt>0) { // 사원등록성공
// 추가되었으니 다시 홈페이지로 이동 //webSJP/index.jsp
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{ // 사원등록실패
response.sendRedirect("webJSP/J02_response_jdbc/empFormOk.jsp");
}
// 5. DB닫기
pstmt.close();
conn.close();
%>
'멀티캠퍼스 풀스택 과정 > 백엔드' 카테고리의 다른 글
백엔드1-7. JSP-6 : 내장객체 Cookie와 Session (0) | 2022.03.04 |
---|---|
백엔드1-6. JSP-5: JAVA와 DB의 연동(isErrorPage)-2 (0) | 2022.03.04 |
백엔드1-4. JSP-3: 내장객체 request 사용해서 서버로 데이터 보내기 (0) | 2022.03.03 |
백엔드1-3. JSP-2: 웹 배포하기 (0) | 2022.03.03 |
백엔드1-2. JSP-1: JSP기초와 예제(이클립스에서 웹 프로젝트 생성) (0) | 2022.03.03 |