New World

[JSP 공부 #5] JDBC 프로그래밍 본문

Programming/Languages

[JSP 공부 #5] JDBC 프로그래밍

hyeovi 2020. 6. 30. 14:06
728x90
반응형

데이터베이스 연동

 

 

 

1. 브라우저에서 웹 서버(HTTP Server)에 네트워크 연결
2. 웹 서버에서 JSP Container과 연결, html 파일, 이미지 파일 등의 파일 읽기
3. JSP Container에서 servlet instance로 연결
4. servlet instance와 MySQL을 JDBC 드라이버가 연결 시켜줌
5. 웹 서버가 받은 결과를 브라우저로 보내줌

 

 


JDBC

자바 프로그램에서 데이터 베이스와 연결하여 데이터 베이스 관련 작업을 할 수 있도록 해주는 자바 프로그래밍 인터페이스를 위한 API 규격
- 데이터 베이스를 연결하여 테이블 형태의 자료를 참조
- SQL 문을 질의, 결과 처리

JDBC 드라이버
- JDBC 인터페이스에 맞춰 해당 DBMS에서 JDBC 관련 API 호출이 가능하도록 관련 인터페이스와 클래스를 구현한 클래스 라이브러리

MySQL JDBC 드라이버 설치

[mysql-connector-java-5.1.6-bin.jar] 파일을 아래 세 곳에 복사 완료
• [JDK 설치 폴더]/[jre]/[lib]/[ext]
• [Tomcat 설치 폴더]/[lib]
• [이클립스 프로젝트 하부의 WebContent]/[WEBINF]/[lib]


JDBC 프로그래밍 절차

1. JDBC 드라이버 로드

Class.forName("org.git.mm.mysql.Driver");

 

2. DB 연결
String URL = "jdbc:mysql://localhost:3306/dbname";

Connection con = DriverManger.getConnection(URL, "userid", "passwd");

URL: 사용할 드라이버명:사용할 sql 프로그램://DBMS 서비스 될 호스트 번호/접속할 DB명
//localhost MySQL이 실행되는 DBMS 서버를 지정, IP주소 또는 도메인 이름
:<port>  DBMS 서비스 포트 번호로 3306으로 서비스 된다면 생략 가능
/<dbname> 접속할 데이터 베이스 이름
ex) jdbc:mysql://localhost:3306/dbname


3. SQL을 위한 Statement 객체 생성
질의 문장인 SQL 문을 추상화시킨 인터페이스 객체 생성

Statement 종류
Statement

Statement stmt = con.createStatement();

PreparedStatement(주로 사용되는 Statement)
PreparedStatement pstmt = con.prepareStatement(SQL);
CallableStatement
CallableStatement cstmt = con.prepareCall(SQL);


4. SQL 문장 실행

 

메소드  executeQuert(SQL) 일반 쿼리
Result result = stmt.executeQuery(SQL);
메소드 executeUpdate(SQL) 수정, 삽입하게 될 쿼리
int rowCount = stmt.executeUpdate(SQL);
메소드 execute(SQL) 어떤 쿼리든 사용 가능
stmt.execute(SQL);
Result result = stmt.getResultSet();

stmt.execute(SQL);
int rowCount = stmt.getUpdateCount();

 

5. 질의 결과 ResultSet 처리
Result result = stmt.executeQuery(sql);
while(result.next(){

           <%=result.kgetString(1)%>
           <%=result.kgetString("password")%>
           <%=result.kgetInt(3)%>
}

<%=result.getString(필드)%>
필드 안에는 숫자, 필드명 삽입하는 것 가능

6. JDBC 객체 연결 해제
이미 사용한 JDBC 객체의 연결을 해제하는 일
result.close();

stmt.close();

con.close();


메타데이터: 데이터를 위한 데이터
데이터 베이스 자체에 대한 정보 또는 테이블 자체 및 칼럼에 대한 정보
DatabaseMetaData와 ResultSetMetaData를 제공

커넥션 풀

데이터베이스 커넥션 풀 관리 기법
- 데이터베이스 연결 작업은 서버의 자원을 이용하는 작업, 계속적으로 발생한다면 시스템에 상당히 부하를 주는 요소
- 미리 여러 개의 데이터베이스 커넥션을 만들어 확보해놓고 클라이언트의 요청이 있는 경우, 커넥션을 서비스해주는 커넥션 관리 기법

 

 

 

1. 적정 수의 Connection을 만들어 저장

2. 커넥션 풀에서 Connection을 꺼내와 데이터 소스에 연동하여 사용
3. 커넥션 풀에서 꺼내온 Connection을 데이터 소스에 연동하여 사용
4. Connection을 사용 후 다시 커넥션 풀에 넣음

자카르타DBCP
- 톰캣을 설치했다면 설치 폴더 [Tomcat 설치 폴더]/[lib]하부에 파일 [tomcat-dbcp.jar]로 존재


자바빈즈를 이용한 JDBC 프로그래밍 방식
- DB 연결 및 처리 작업은 DB 연동 자바 빈즈에서 작업
- 결과인 자료 출력은 JSP 프로그램에서 수행하는 프로그램 방식

 

JDBC 프로그래밍 방식

.jsp(데이터 베이스 처리 비즈니스 로직 부분)
<-(JSP 프로그램에서 직접 데이터베이스 연결 및 처리 작업 수행)-> DB

 

자바 빈즈를 이용한 JDBC 프로그래밍 방식

 

.jsp(주로 프리젠테이션 역할)

<-(정보 저장 자바 빈즈/ DB처리 전담 자바빈즈 이용)

->(DB 처리 자바빈즈)

<-(SQL문 실행)->DB

 

 

JDBC 프로그래밍 절차

1. JDBC 드라이버 로드

2. DB 연결

3. SQL을 위한 Statement 객체 생성

4. SQL 문장 실행

5. 질의 결과 ResultSet 처리

6. JDBC 객체 연결 해제

 

DBCP를 이용하려면 설정파일 [server.xml]과 [web.xml]을 수정

[server.xml]

<Resource 
                  name="jdbc/mysql"
                  auth="Container"
                  type="javax.sql.DataSource"
                  maxActive="100"
                  maxIdle="30"
                  maxWait="10000"
                  username="root"
                  password="pwd"
                  driverClassName="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost:3306/데이터 베이스 명"
                  />

 

[web.xml]

<description>MySQL Datasource</description>

 <resource-ref>
      <description>MySQL Datasource</description>
      <res-ref-name>jdbc/mysql</res-ref-name>

     <res-type>javax.sql.DataSource<res-type>

      <res-auth>Container</res-auth>
 </resource-ref>

 

ex)

[server.xml]

<Resource 
                  name="jdbc/mysql" 
                  auth="Container"
                  type="javax.sql.DataSource"
                  maxActive="100"
                  maxIdle="30"
                  maxWait="10000"
                  username="root"
                  password="pwd" 
                  driverClassName="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost:3306/univdb?autoReconnect=true&amp;serverTimezone=UTC&amp;serverTimezone=Asia/Seoul&amp;useSSL=false&amp;characterEncoding=utf8&amp;characterSetResults=utf8"
                  />

 

[web.xml]

<description>MySQL Datasource</description>

 <resource-ref>
      <description>MySQL Datasource</description>
      <res-ref-name>jdbc/mysql</res-ref-name>

     <res-type>javax.sql.DataSource<res-type>

      <res-auth>Container</res-auth>
 </resource-ref>

반응형

'Programming > Languages' 카테고리의 다른 글

[JSP 공부 #7] JSTL  (0) 2020.06.30
[JSP 공부 #6] 표현 언어(EL)  (0) 2020.06.30
[JSP 공부 #4] 데이터 베이스와 MySQL  (0) 2020.06.30
[JSP 공부 #3] 자바 빈즈(JAVA Beans)  (0) 2020.06.30
[JSP 공부 #2] 쿠키와 세션  (0) 2020.06.29
Comments