티스토리 뷰
1) JDBC Driver 등록 : 해당 dbms가 제공하는 클래스 등록
2) Connection 생성 : 접속하고자 하는 DB정보를 입력해서 DB에 접속하면서 생성
3) Statement 생성 : Connection 객체를 이용해서 생성
4) SQL문을 전달하면서 실행 : Statement 객체를 이용해서 sql문 실행
> SELECT문 실행시 → excuteQuery() 메소드 이용하여 실행
> 나머지 dml문 → executeUpdate() 메소드를 이용하여 실행
5) 결과 받기
> SELECT 문일 경우 → ResultSet객체(조회된 데이터들이 담겨있음)로 받기
> 나머지 dml문일경우 → int형 변수(처리된 행의 갯수)로 받기
6) ResultSet객체에 담긴 데이터들을 하나씩 뽑아서 VO객체에 담기(ArrayList로 묶어서 관리함)
7) 다 쓴 JDBC용 객체들을 반드시 자원반납시켜줌 → 생성된 순서의 역순으로
8) SQL문 수행 결과를 Controller에 반환
> SELECT 문일경우 → 6번 결과값
> 나머지 dml문일경우 → int형 값
출처 : https://iwantspring.tistory.com/58?category=1096661
[JDBC] 오라클 - 이클립스 - 맥북 : 드라이버 등록, JDBC 코딩 절차
[목차] 드라이버 등록 JDBC 코딩절차 드라이버 등록 오라클 11g 버전만 다운 받으세요 다운로드가 완료되면 JDBC 폴더를 만들고 드라이버 넣어 줄 폴더를 생성합니다. Tip) 새로운 주석 메소드에 대
iwantspring.tistory.com
▼ 모델 2 방식 설계
- 모델 2 방식으로 Student 테이블의 있는 모든 정보 테이블로 보이기.
selectStudentBean.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>데이터베이스 자바빈즈 Test-Table Student 조회</title>
</head>
<body>
<%@ page import = "java.sql.*, javax.sql.DataSource, javax.naming.*" %>
<%@ page import = "java.util.ArrayList, univ.StudentEntity" %>
<h2> 자바 빈즈 StudentDatabase을 이용한 테이블 Student 조회 프로그램</h2>
<hr size = "5" color = "red">
<h2>학생 정보 조회</h2>
<jsp:useBean id ="stdtdb" class="univ.StudentDatabase" scope="page"/>
<%
ArrayList<StudentEntity> list = stdtdb.getStudentList();
int counter = list.size();
if(counter > 0){
%>
<table border = "2">
<tr>
<td align="center"><b>아이디</b></td>
<td align="center"><b>암호</b></td>
<td align="center"><b>이름</b></td>
<td align="center"><b>입학년도</b></td>
<td align="center"><b>학번</b></td>
<td align="center"><b>학과</b></td>
<td align="center"><b>휴대폰1</b></td>
<td align="center"><b>휴대폰2</b></td>
<td align="center"><b>주소</b></td>
<td align="center"><b>이메일</b></td>
</tr>
<%
for(StudentEntity stdt :list){
%>
<tr>
<td align="center"><%=stdt.getId() %></td>
<td align="center"><%=stdt.getPasswd() %></td>
<td align="center"><%=stdt.getName() %></td>
<td align="center"><%=stdt.getYear() %></td>
<td align="center"><%=stdt.getSnum() %></td>
<td align="center"><%=stdt.getDepart() %></td>
<td align="center"><%=stdt.getMobile1() %></td>
<td align="center"><%=stdt.getMobile2() %></td>
<td align="center"><%=stdt.getAddress() %></td>
<td align="center"><%=stdt.getEmail() %></td>
</tr>
<%
}
}
%>
</table>
<p>
<hr size="5" color="green">
조회된 학생수가 <%= counter %> 명 입니다.
<hr size ="5" color="green">
</body>
</html>
StudentEntity.java
package univ;
public class StudentEntity {
private String id;
private String passwd;
private String name;
private int year;
private String snum;
private String depart;
private String mobile1;
private String mobile2;
private String address;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getSnum() {
return snum;
}
public void setSnum(String snum) {
this.snum = snum;
}
public String getDepart() {
return depart;
}
public void setDepart(String depart) {
this.depart = depart;
}
public String getMobile1() {
return mobile1;
}
public void setMobile1(String mobile1) {
this.mobile1 = mobile1;
}
public String getMobile2() {
return mobile2;
}
public void setMobile2(String mobile2) {
this.mobile2 = mobile2;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
StudentDatabase.java
package univ;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class StudentDatabase {
// 테이블 STUDENT 데이터베이스 연동을 위한 자바빈즈 프로그램
private static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String JDBC_URL = "Jdbc:oracle:thin:@localhost:1521:xe";
private static final String USER = "scott";
private static final String PASSWD = "tiger";
private Connection conn = null;
private Statement stmt = null;
// JDBC 드라이버 등록
public StudentDatabase() {
try {
Class.forName(JDBC_DRIVER);
}catch(Exception e) {
e.printStackTrace();
}
}
// Connection 객체 생성
public void connect() {
try {
conn = DriverManager.getConnection(JDBC_URL, USER, PASSWD);
}catch(Exception e){
e.printStackTrace();
}
}
public void disConnect() {
if(stmt != null) {
try {
stmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
// 모든 레코드를 반환하는 메소드
public ArrayList<StudentEntity> getStudentList(){
connect();
// 질의 결고리를 저장한 ArrayList 객체 생성
ArrayList<StudentEntity> list = new ArrayList<>();
String SQL = "SELECT * FROM student";
try {
// statement객체 생성
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL);
// ResultSet의 모든 행을 각각의 StudentEntity에 저장
while(rs.next()) {
// 한 학생의 정보를 저장할 빈즈 객체 생성
StudentEntity stu = new StudentEntity();
// 자바 빈즈 객체에 저장
stu.setId(rs.getString("id"));
stu.setPasswd(rs.getString("passwd"));
stu.setName(rs.getString("name"));
stu.setYear(rs.getInt("year"));
stu.setSnum(rs.getString("snum"));
stu.setDepart(rs.getString("depart"));
stu.setMobile1(rs.getString("mobile1"));
stu.setMobile2(rs.getString("mobile2"));
stu.setAddress(rs.getString("address"));
stu.setEmail(rs.getString("email"));
//ArrayList의 학생정보를 StudentEntity에 추가
list.add(stu);
}
rs.close();
}catch(Exception e) {
}finally {
disConnect();
}
//완성된 ArrayList 객체를 반환
return list;
}
}
- 모델 2 설계 방식도 똑같이 JDBC Driver 등록해주고, Connection 생성해서 Statment 객체를 열어주고 SELECT문 실행시 excuteQuery() 메소드를 사용해서, ResultSet 객체로 데이터들을 받아주면 된다.
▼ 모델 1 방식 설계
- 모델 2 방식으로 Student 테이블의 있는 모든 정보 테이블로 보이기.
Model1.java
<%@ 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>
<%@ page import = "java.sql.*" %>
<h2>데이터베이스 scott의 테이블 student 조회 프로그램</h2>
<hr>
<h2>학생정보 조회</h2>
<%
Connection con = null;
Statement stmt = null;
ResultSet result = null;
String driverName = "oracle.jdbc.driver.OracleDriver";
String dbURL = "jdbc:oracle:thin:@localhost:1521:xe";
try{
Class.forName(driverName);
con = DriverManager.getConnection(dbURL, "scott", "tiger");
stmt = con.createStatement();
// ResultSet은 Statement에서 executeQuery문을 받을 수 있음 테이블 형식으로
result = stmt.executeQuery("select * from student");
%>
<table border = "2">
<tr>
<td align = center><b>아이디</b></td>
<td align = center><b>암호</b></td>
<td align = center><b>이름</b></td>
<td align = center><b>입학년도</b></td>
<td align = center><b>학번</b></td>
<td align = center><b>학과</b></td>
<td align = center><b>휴대폰1</b></td>
<td align = center><b>휴대폰2</b></td>
<td align = center><b>주소</b></td>
<td align = center><b>이메일</b></td>
</tr>
<%
while(result.next()){
%>
<tr>
<td align = center><%= result.getString(1) %></td>
<td align = center><%= result.getString(2) %></td>
<td align = center><%= result.getString(3) %></td>
<td align = center><%= result.getInt(4) %></td>
<td align = center><%= result.getString(5) %></td>
<td align = center><%= result.getString(6) %></td>
<td align = center><%= result.getString(7) %></td>
<td align = center><%= result.getString(8) %></td>
<td align = center><%= result.getString(9) %></td>
<td align = center><%= result.getString(10) %></td>
</tr>
<%
}
result.close();
}catch(Exception e){
out.println("Oracle 데이터베이스 scott의 student 조회에 문제가 있습니다. <hr>");
out.println(e.toString());
e.printStackTrace();
}finally{
if(stmt != null) stmt.close();
if(con != null) con.close();
}
%>
</table>
</body>
</html>
모델 1과 모델2의 차이점이 뭘까?
1. 모델 1 구조
먼저 모델1은 뷰와 로직을 모두 JSP 페이지 하나에서 처리하는 구조를 말한다.
장점으로는 구조가 단순하여 익히기가 쉽고, 이와 같은 이유로 숙련된 개발자가 아니더라도 구현이 용이하다.
단점으로는 출력을 위한 뷰 코드와 로직 처리를 위한 자바 코드가 함께 섞이기 때문에 JSP 코드 자체가 복잡해진다.
2. 모델 2 구조
모델 2는 모든 처리를 JSP 페이지 하나가 담당하는것과 달리 JSP 페이지와 서블릿, 그리고 로직을 위한 클래스가 나뉘어 브라우저 요청을 처리한다.
3. 모델 1 구조 vs 모델 2 구조
모델 2가 늦게 나왔다고 무조건 장점만 가지고 있는 것은 아니다. 모델 2는 규모가 큰 프로젝트나 업데이트가 빈번한 프로젝트엔 용이할지 모르지만, 규모가 크기 않고 업데이트가 적은 프로젝트일 경우에는 모델1이 바람직할 수 있다. 모델1과 모델2는 완전히 다른 장점과 단점을 가지고 있으므로 하나만 무조건적으로 사용한다기보다 상황에따라 적절한 선택이 필요할것 같다.
'back > JDBC' 카테고리의 다른 글
JDBC 드라이버 등록 (0) | 2022.10.12 |
---|