티스토리 뷰

학교공부

chapter - 15

날따라해봐요요롷게 2021. 7. 2. 14:56

JDBC로 데이터베이스와 JSP 연동

  • JDBC의 개요
  • JDBC 드라어비 로딩 및 DBMS 접속
  • 데이터베이스 쿼리 실행
  • 쿼리문 실행 결과 값 가져오기 

JDBC의 개요

 JDBC는 자바 프로그램 내에서 데이터베이스와 관련된 작업을 처리할 수 있도록 도와주는 자바 표준 인트페이스이다.

관계형 데이터터베이스 시스템에 접근하여 SQL 문을 실행하기 위한 자바 API 또는 자바 라이브러리 이다.

JDBC API는 java .sql.* 패키지에 의해 구현, 단일 API를 제공하는 클래스와 인터페이스의 집합이다. 

 

JDBC를 사용한 JSP와 데이터베이스 연동 단계

  • java.sql.* 패키지 임포트
  • JDBC 드라이버 
  • 데이터베이스 접속을 위한 Connection 객체 생성
  • 쿼리문을 실행하기 위한 Statement / PreparedStatement / CallableStatement 객체 생성
  • 쿼리 실행
  • 쿼리 실행의 결과 값 (int, ResultSet) 사용
  • 사용된 객체 종료 (ResultSet, Statement / PreparedStatement / CallableStatement, Connection)

JDBC 드라이버 로딩 및 DBMS 접속

 데이터베이스 접근은

- JDBC 드라이버 로딩

- 로딩 후 데이터베이스 연결

- 데이터베이스 관련 작업 종료되면 데이터베이스 연결 해제

 

## JDBC 드라이버 로딩

JDBC 드라이버 로딩 단계에서는 인터페이스를 구현하는 작업으로 Class.forName() 메소드를 이용한다.

로딩되면 자동으로 객체가 생성되고 DriverManager 클래스에 등록된다.

드라이버 로딩은 프로그램 수행 시 한 번만 필요하다.

 

Class.forName(String className);
<% // 드라이버 로딩
	try{
    	Class.forName("com.mysql.jdbc.Driver");
    } catch(SQLException e){
    }
%>

JDBC 드라이버 로딩을 하는 다른 방법

 : web.xml 파일의 <init-param> 요소에 드라이버 이름을 설정하여, 서블릿을 초기화할 때 로딩되게 한다.

<init-param>
	<param-name>jdbcDriver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
</init-param>

// 이후 요소에 설정한 드라이버 이름을 사용한다.

java.lang.Class.forName(config.getInitParameter("jdbcDriver"));

## Connection 객체 생성하기

: JDBC 드라이버에서 데이터베이스와 연결된 커넥션을 가져오기 위해 DriverManager 클래스의 getConnection() 메소드를 사용한다. DriverManager 클래스로 Connection 객체를 생성할 때 JDBC 드라이버를 검색하고, 검색된 드라이버를 이용하여 Connection 객체를 생성한 후 이를 반환한다.

static Connection getConnection(String url)
static Connection getConnection(String url, String user, String password)
static Connection getConnection(String url, Properties info)

url 은 데이터베이스 경로 : jdbc:dbms 이름 : 주소 : 포트 번호

user는 데이터베이스 사용자 이름

password 는 데이터베이스 사용자 비밀번호

info는 사용자 및 비밀번호 등의 추가 정보를 포함한 Properties 객체이고, 이객체를 사용하려면 java.util.Properties를 임포트 해야한다.

 

<%
	Connection conn = null;
    try{
    	Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("url");
    }catch(SQLException e){
    	//예외처리
    }
%>
//
<%
	Connection conn = null;
    try{
    	Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("url", "user", "password");
    }catch(SQLException e){
    	//예외처리
    }
%>
///
<%
	Connection conn = null;
    try{
    	Class.forName("com.mysql.jdbc.Driver");
        Properties props = new Properties();
        props.put("user", "root");
        props.put("password", "1234");
        conn = DriverManager.getConnection("url", props);
    }catch(SQLException e){
    	//예외처리
    }
%>

 

## 데이터베이스 연결 닫기

: 데이터베이스 연결이 끝나면 반드시 데이터베이스와 연결을 끊어 주어야한다. 생성한 객체를 close() 메서드로 해체한다.

 

// void close() throws SQLException
<%
	Connection conn = null;
    try{
    	//JDBC 드라이버 로딩
        //Connection 객체 생성
    }catch(){
    	// 예외처리
    } finally{
    	if(conn != null) conn.close();
    }
%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<html>
<head>
<title>Database SQL</title>
</head>
<body>
	<%
		Connection conn = null;
		try{
			String url = "jdbc:mysql://localhost:3306/jspbookdb?serverTimezone=UTC";
			String user = "root";
			String password = "rhkdgns92";
			
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, user, password);
			out.println("데이터베이스 연결 성공!!");
		} catch(SQLException e){
			out.println("데이터베이스 연결 실패!!");
			out.println("SQLException : " + e.getMessage());
		}finally{
			if(conn != null) conn.close();
		}
	%>
</body>
</html>

url 작성 중 서버타임이 맞지 않는 경우 연결이 되지 않을 때가 있다. 그럴 경우 serverTimezone=UTC 를 작성한다.

 

데이터베이스 쿼리 실행

Connection 객체를 생성하여 데이터베이스 연결이 되었다면 쿼리 실행 객체를 이용하여 쿼리를 실행한다.

쿼리 실행 객체는 Statement, PreparedStatement, CallableStatement 이다.

후에 Connection 객체의 리소스를 해제해야 한다.

 

## Statement 객체로 데이터 접근하기

: Statement 객체는 정적인 쿼리에 사용한다. 해당 객체는 하나의 쿼리를 작성하면 더는 사용할 수 없다.

그래서 반드시 사용 후 close() 메서드를 사용하여 객체를 즉시 해제해야 한다.

 

Statement 객체를 생성하면 Statement 객체의 executeQuery(), executeUpdate() 메서드를 호출하여 쿼리문을 실행

- executeQuery(String sql) : SELECT 문을 실행할 때 사용 / ResultSet 객체 반환

- executeUpdate(String sql) : 사입, 수정, 삭제와 관련된 SQL 문 실행

 

executeQuery() 데이터 조회하기

 : Statement 객체 stmt에 connection 객체를 연결 한 후 작성한 sql 문을 executeQuery메서드를 통해 데이터를 받아온다.

<%
	Connection conn = null;
    <생략..>
	Statement stmt = conn.createStatement();
    String sql = "SELECT * FROM Member WHERE id = '1' " ;
    ResultSet rs = stmt.executeQuery(sql);
    stmt.close();
%>

 

executeUpdate() 메소드로 데이터 삽입, 수정 삭제하기

: 해당 메서드는 INSERT, UPDATE, SELECT 쿼리문을 통해 데이터를 삽입, 수정, 삭제하는데 사용된다.

 

<%
	Connection conn = null;
    <생략..>
	Statement stmt = conn.createStatement();
    String sql = "INSERT INTO Member(id, name, passwd) VALUES ('1', '홍길순', '1234')";
	int rs = stmt.excuteUpdate(sql);
	stmt.close();
%>

 

## PreparedStatement 객체로 데이터 접근하기

 : 해당 객체는 동적인 쿼리에 사용한다. 하나의 객체로 여러 번의 쿼리를 실행할 수 있다.

 

매개변수 sql은 데이터베이스에 보낼 쿼리문이다. 쿼리문은 정해지지 않았기 때문에 ?(물음표)로 표시한다.

물음표에 값을 할당하기 위해 set--() 메소드를 사용한다. 해당 메소드는 2개의 매개변수인데 첫 번째 매개변수는 설정한 물음표 위치 값(1부터 시작) 과 실제 할당 값을 가진다.

보내는 데이터 자료형에 맞게 setString(), setInt() .... 처럼 설정을 한다.

 

 

 

 

 

 

 

 

쿼리문 실행 결과 값 가져오기

 

'학교공부' 카테고리의 다른 글

(학교공부) JAVA - 스레드  (0) 2021.11.02
기말고사  (0) 2021.06.14
JSP - 1  (0) 2021.03.03
구조체, 공용체 - #1  (0) 2021.02.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함