1. SAVE
insert 쿼리문 후에는 항상 commit; 쿼리문을 날려줘야 한다.
package com.icia.ex.repository;
import java.sql.Connection;
import java.sql.DriverManager;
public class ExRepository {
// DB에 접속하기 위한 메서드. Repository 클래스의 모든 메서드가 시작전에 이 메서드를 호출해야 DB 작업 수행 가능.
public Connection getConnection() throws Exception {
// 이 메서드의 내용은 보통 평가지에서 제시함. (사용자 계정만 잘 구분하면 됨.)
// 클래스를 로드 하는 역할(매개변수로 넘기는 클래스가 가지고 있는 필드, 메서드 종류, 클래스 이름 등을 JVM에 할당)
// 인스턴스 생성 및 초기화를 해줌.
// 컴파일 시점이 아니라 런타임 시점에 로딩을 할 수 있게 해줌.(DI랑 비슷한 역할)
Class.forName("oracle.jdbc.OracleDriver"); // 사용할 DB 드라이버 로드
// 접속할 DB 주소, 사용자 계정, 비밀번호
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe", "user1", "1234");
return con;
}
}
ExRepository에 해당 코드를 작성한다.
import를 해주도록 하자.
<%@ page inport="com.icia.ex.repostiroy.ExRepository" %>
<%@ 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>
<h2>param2.jsp</h2>
<!-- scriptlet(스크립틀릿): JSP에서 Java코드 작성 -->
<%
// 한글깨짐 처리
request.setCharacterEncoding("UTF-8");
// p1, p2값을 가져오기 - 요즘 방식은 아니다.
// Spring에서는 @RequestParam("p1") String p1
// 순수 Servlet : request.getParameter("p1")
String name = request.getParameter("name");
// 기본적으로 String 타입이기 때문에 Int로 형변환 후에 age에 저장해야 한다.
int age = Integer.parseInt(request.getParameter("age"));
String mobile = request.getParameter("mobile");
// ExRepository 객체 생성
ExRepository ex = new ExRepository();
%>
<!-- 스크립틀릿에서 선언한 Java변수값 출력 -->
<h3>전달받은 값</h3>
<p><%=name%></p>
<p><%=age%></p>
</body>
</html>
ExRepository를 사용하려면 Import가 되어 있어야 하므로 최상단에 직접 코드를 작성해야 한다.
<%
// 한글깨짐 처리
request.setCharacterEncoding("UTF-8");
// p1, p2값을 가져오기 - 요즘 방식은 아니다.
// Spring에서는 @RequestParam("p1") String p1
// 순수 Servlet : request.getParameter("p1")
String name = request.getParameter("name");
// 기본적으로 String 타입이기 때문에 Int로 형변환 후에 age에 저장해야 한다.
int age = Integer.parseInt(request.getParameter("age"));
String mobile = request.getParameter("mobile");
// ExRepository 객체 생성
ExRepository ex = new ExRepository();
ex.save(name, age, mobile);
%>
ExRepository 객체를 생성해서 값을 담아서 save메소드를 호출한다.
public class ExRepository {
// DB에 접속하기 위한 메서드. Repository 클래스의 모든 메서드가 시작전에 이 메서드를 호출해야 DB 작업 수행 가능.
public Connection getConnection() throws Exception {
// 이 메서드의 내용은 보통 평가지에서 제시함. (사용자 계정만 잘 구분하면 됨.)
// 클래스를 로드 하는 역할(매개변수로 넘기는 클래스가 가지고 있는 필드, 메서드 종류, 클래스 이름 등을 JVM에 할당)
// 인스턴스 생성 및 초기화를 해줌.
// 컴파일 시점이 아니라 런타임 시점에 로딩을 할 수 있게 해줌.(DI랑 비슷한 역할)
Class.forName("oracle.jdbc.OracleDriver"); // 사용할 DB 드라이버 로드
// 접속할 DB 주소, 사용자 계정, 비밀번호
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe", "user1", "1234");
return con;
}
public void save(String name, int age, String mobile) {
System.out.println("save 호출");
System.out.println("name"+name+"age:"+age+"mobile:"+mobile);
}
}
확인을 위해 save 메소드가 호출되면 sout으로 찍어보겠다.
즉 , jsp에서 post로 값을 전달받고 거기서 ExRepository 객체를 생성해서 값을 담고 그것을 보내는것이다.
form 태그로 값을 보내서 jsp에 출력하고 sout까지 찍힌것을 볼 수 있다.
이제 Database를 이어야 하는데 ExRepository에 객체를 선언해야 한다.
Connection con = null; // DB 접속 관련 처리를 위한 객체
PreparedStatement pstmt = null; // 쿼리문 전송 관련 처리를 위한 객체
ResultSet rs = null; // select 결과를 담기 위한 객체
public void save(String name, int age, String mobile) throws Exception {
System.out.println("save 호출");
System.out.println("name"+name+"age:"+age+"mobile:"+mobile);
// 1. DB에 접속
con = getConnection();
// 2. 쿼리문 작성 ( 변수 값을 넣을 부분은 물음표로 작성)
String sql = "INSERT INTO EX_TABLE(EX_NAME,EX_AGE,EX_MOBILE) VALUES(?,?,?)";
// 3. DB에 전송할 쿼리문 준비
pstmt = con.prepareStatement(sql);
// 4. 물음표 채우기
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setString(3, mobile);
// 5. 쿼리문 실행
pstmt.executeUpdate();
// 6. 실행 후 pstmt 종료
pstmt.close();
// 7. 접속 종료
con.close();
}
메소드가 이렇게 작성된다.
// 5. 쿼리문 실행
// insert가 된 만큼 int 수를 리턴한다.
int result = pstmt.executeUpdate();
executeUpdate()의 리턴값은 int인데 , 넣은 필드만큼 int값을 반환하게 된다.
그렇다면 이 result가 0이라면 제대로 insert된게 아닐 것이다.
<%@ page import="com.icia.ex.repository.ExRepository" %>
<%@ 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>
<h2>param2.jsp</h2>
<!-- scriptlet(스크립틀릿): JSP에서 Java코드 작성 -->
<%
// 한글깨짐 처리
request.setCharacterEncoding("UTF-8");
// p1, p2값을 가져오기 - 요즘 방식은 아니다.
// Spring에서는 @RequestParam("p1") String p1
// 순수 Servlet : request.getParameter("p1")
String name = request.getParameter("name");
// 기본적으로 String 타입이기 때문에 Int로 형변환 후에 age에 저장해야 한다.
int age = Integer.parseInt(request.getParameter("age"));
String mobile = request.getParameter("mobile");
// ExRepository 객체 생성
ExRepository ex = new ExRepository();
int result = ex.save(name, age, mobile);
if(result>0) {
%>
<script>
alert("저장 성공! index.jsp로 돌아갑니다");
location.href = "index.jsp";
</script>
<%
} else {
%>
<script>
alert("저장 실패");
</script>
<%
}
%>
<!-- 스크립틀릿에서 선언한 Java변수값 출력 -->
<h3>전달받은 값</h3>
<p><%=name%></p>
<p><%=age%></p>
</body>
</html>
요즘은 잘 쓰이지 않는 방식이지만 이렇게 <% %>와 script를 잘 조합해서 이렇게 쓸 수 있지만 이렇게 사용하지는 않는다.
2. FindAll
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>hello servlet!!</h2>
<a href="hello.jsp">hello.jsp로 이동</a>
<!-- param1.jsp에 get방식으로 p1="안녕",p2="반가워"를 보내보기 -->
<a href="param1.jsp?p1=안녕&p2=반가워">파라미터 전송</a>
<!-- form 태그를 이용해서 이름(name), 나이(age)를 각각 입력받아서
post 방식으로 param2.jsp로 전송하고 param2.jsp에서 입력값을 출력해보기-->
<form action="param2.jsp" action="post">
<label id="name">이름</label>
<input type="text" id="name" name="name" placeholder="이름"> <br>
<label id="age">나이</label>
<input type="text" id="age" name="age" placeholder="나이"> <br>
<label id="mobile">나이</label>
<input type="text" id="mobile" name="mobile" placeholder="전화번호"> <br>
<input type="submit" value="전송">
</form>
<br>
<a href="select.jsp">조회하기</a>
</body>
</html>
index.jsp에 조회하는 a태그를 만들었다.
<%@ page import="com.icia.ex.repository.ExRepository" %>
<%@ page import="com.icia.ex.dto.ExDTO" %>
<%@ page import="java.util.List" %>
<%@ 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>
<h2>select.jsp</h2>
<%
ExRepository ex = new ExRepository();
List<ExDTO> list = ex.findAll();
%>
</body>
</html>
Repository에서 가져와야 하니까 import해준다.
Repository에서 findAll 메소드를 제작한다.
public List<ExDTO> findAll() throws Exception {
con = getConnection();
// 조회 결과를 담을 리스트
List<ExDTO> list = new ArrayList<>();
String sql = "SELECT * FROM EX_TABLE";
pstmt = con.prepareStatement(sql);
// select 쿼리 수행할 때는 executeQuery() 메소드, Return 타입이 ResultSet이므로 rs
rs = pstmt.executeQuery();
// ResultSet의 next(): 조회결과가 있으면 true, 조회결과가 여러 줄이라면 while 문의 조건으로 사용
while (rs.next()) {
ExDTO dto = new ExDTO();
dto.setName(rs.getString(1)); // 조회결과 중 첫번째 컬럼값
dto.setAge(rs.getInt(2)); // 정수 데이터라 getInt() 사용
dto.setMobile(rs.getString(3));
list.add(dto);
}
pstmt.close();
con.close();
return list;
}
<%@ page import="com.icia.ex.repository.ExRepository" %>
<%@ page import="com.icia.ex.dto.ExDTO" %>
<%@ page import="java.util.List" %>
<%@ 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>
<style>
table, tr, td, th {
border: 1px solid black;
}
</style>
</head>
<body>
<h2>select.jsp</h2>
<table>
<tr>
<th>이름</th>
<th>나이</th>
<th>전화번호</th>
</tr>
<%
ExRepository ex = new ExRepository();
List<ExDTO> list = ex.findAll();
System.out.println("select.jsp" + list);
for(ExDTO dto: list) {
%>
<tr>
<td><%=dto.getName()%></td>
<td><%=dto.getAge()%></td>
<td><%=dto.getMobile()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
이렇게 리스트로 받아와서 출력도 가능하다.
'정보처리산업기사' 카테고리의 다른 글
Oracle 쿼리문에 대해 (0) | 2023.07.27 |
---|---|
정보처리산업기사 환경설정 - Oracle Developer (0) | 2023.07.27 |
정보처리산업기사 환경설정 - Eclipse와 Oracle Database 연결하기 (0) | 2023.07.27 |
Eclipse 프로젝트 예제 ( get , post로 parameter 보내기 ) (0) | 2023.07.27 |
Eclipse의 동작, 프로젝트 생성 방법 (0) | 2023.07.27 |