티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크