티스토리 뷰
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 |