본문 바로가기

JSP, Servlet/JSP, Oracle 기초

[JSP] 오라클 DB에 저장되어있는 데이터 불러오기

[자바 프로그램에서 데이터베이스를 사용하는 방법]
JDBC(Java Database Connectivity) 이용
 자바 프로그램에서 데이터베이스에 일관된 방식으로 접근할 수 있도록 API를 제공하는 클래스의 집합

 

JDBC 클래스는 java.sql 클래스에 포함되어 있어 패키지 임포트 필요.

<%@ page import="java.sql.*" %>

 

JDBC 관련 인터페이스

인터페이스명  설명 
Connection  데이터베이스 연결과 관련된 인터페이스. 
DriverManager.getConnection()으로 얻음. 
Statement  질의, 갱신과 관련된 인터페이스. connection.createStatement()로 얻음. 
ResultSet  결과물을 가져오는 인터페이스. 
statement.executeQuery()로 얻음.



데이터베이스와 연결하기
 1단계: 사용할 JDBC 드라이버를 프로그램 시작할 때 로딩 (DB업체 제공)
 2단계: DriverManager 클래스를 이용하여 데이터베이스에 접속

 

JDBC 드라이버 연결
 JDBC 드라이버를 아래의 사이트에서 가져온다.

https://www.oracle.com/database/technologies/appdev/jdbc-ucp-183-downloads.html

ojdbc8.jar를 이클립스 Web dynamic 프로젝트 폴더의 WebContent\WEB-INF\lib에 복사한다.

 

Class 클래스로 JDBC 드라이버 로드

Class.forName(oracle.jdbc.driver.OracleDriver);

파라미터에 지정된 Driver 클래스의 정보(클래스 필드, 메소드, 클래스의 종류)를 클래스 로더를 통해 JVM에 로드하고, DriverManager에 JDBC 드라이버가 등록된다.
 DriverManager는 이 정보를 가지고 데이터베이스에 접속한다.

 

데이터베이스에 연결 작업 수행

Connection conn = DriverManager.getConnection(url, uid, pwd);

 

 conn – 데이터베이스와 연결되어 작업을 수행할 수 있는 통로 역할
 url = "jdbc : oracle : thin : [hostname][:port] : dbname"

 

SQL문 수행을 위해 Statement 객체 생성
 Connection 객체(conn)로 접근해서 createStatement() 메소드를 호출하여 생성함.

Statement stmt = conn.createStatement();

 

Query문의 수행

메소드  설명 
executeQuery  select문과 같이 결과값이 여러 개의 레코드로 얻어지는 경우 사용. 
executeUpdate  insert, update, delete 문과 같이 테이블의 내용이 변경되고 결과 값이 없는 경우에 사용.


<ResultSet의 내용>
ResultSet rs = stmt.executeQuery(sql);

 

조회 결과 ResultSet 내용 읽기

메소드  설명
next() 현재 행에서 한 행 앞으로 이동
previous() 현재 행에서 한 행 뒤로 이동
first() 첫 번째 행의 위치로 이동
last()  마지막 행의 위치로 이동

 

ResultSet에서 얻은 각 행(레코드)에서 원하는 컬럼 읽기

메소드  설명 
getString(필드명) 문자열(varchar2, char) 타입의 데이터를 읽는다. 
getInt(필드명)  수치(number) 타입의 데이터를 읽는다.

 

<console로 읽어오기>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%!// 변수 선언
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	String uid = "ora_user";
	String pwd = "ora123";
	String url = "jdbc:oracle:thin:@localhost:1521:XE";
	String sql = "select * from member";%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JDBC를 이용한 데이터베이스 데이터 읽기</title>
</head>
<body>
	<%
		try {
		// 데이터베이스를 접속하기 위한 드라이버 SW 로드
		Class.forName("oracle.jdbc.driver.OracleDriver");
		// 데이터베이스에 연결하는 작업 수행
		conn = DriverManager.getConnection(url, uid, pwd);
		// 쿼리를 생성gkf 객체 생성
		stmt = conn.createStatement();
		// 쿼리 생성
		rs = stmt.executeQuery(sql);

		// 쿼리 수행 결과의 데이터를 읽어온다.
		while (rs.next()) {
			System.out.println(rs.getString("name"));
			System.out.println(rs.getString("userid"));
			System.out.println(rs.getString("pwd"));
			System.out.println(rs.getString("email"));
			System.out.println(rs.getString("phone"));
			System.out.println(rs.getInt("admin"));
			System.out.println();
		}
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		try {
			if (rs != null) {
		rs.close();
			}
			if (stmt != null) {
		stmt.close();
			}
			if (conn != null) {
		conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	%>
</body>
</html>

 

<테이블로 읽어오기>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%!// 변수 선언
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	String uid = "ora_user";
	String pwd = "ora123";
	String url = "jdbc:oracle:thin:@localhost:1521:XE";
	String sql = "select * from member";%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JDBC를 이용한 데이터베이스 테이블 만들기</title>
</head>
<body>
	<%
		try {
		// 데이터베이스를 접속하기 위한 드라이버 SW 로드
		Class.forName("oracle.jdbc.driver.OracleDriver");
		// 데이터베이스에 연결하는 작업 수행
		conn = DriverManager.getConnection(url, uid, pwd);
		// 쿼리를 생성gkf 객체 생성
		stmt = conn.createStatement();
		// 쿼리 생성
		rs = stmt.executeQuery(sql);
	%>
	<table border="1">
		<tr>
			<td>이름</td>
			<td>아이디</td>
			<td>암호</td>
			<td>이메일</td>
			<td>전화번호</td>
			<td>권한(1 : 관리자, 0 : 일반회원)</td>
		</tr>
		<%
			while (rs.next()) {
		%>
		<tr>
			<td><%=rs.getString("name")%></td>
			<td><%=rs.getString("userid")%></td>
			<td><%=rs.getString("pwd")%></td>
			<td><%=rs.getString("email")%></td>
			<td><%=rs.getString("phone") %></td>
			<td><%=rs.getInt("admin") %></td>
		</tr>
	

	<%
		}
	} catch (Exception e) {
	e.printStackTrace();
	} finally {
	try {
	if (rs != null) {
		rs.close();
	}
	if (stmt != null) {
		stmt.close();
	}
	if (conn != null) {
		conn.close();
	}
	} catch (Exception e) {
	e.printStackTrace();
	}
	}
	%>
	</table>
</body>
</html>

 

 

728x90
반응형