JSP 오라클DB연결, Maven

MINJU KIM·2023년 12월 4일

JSP

목록 보기
12/30

https://wikidocs.net/18342

https://mvnrepository.com/

...ojdbc10 다운...받아야하는데 없네?


pom.xml에
코드

<dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc10</artifactId>
            <version>19.17.0.0</version>
        </dependency>
        //를 dependencies 안에 넣어준다.


넣으면 비활성되어 빨갛게 될텐데
[ pom.xml - 오른쪽클릭 - Maven - 프로젝트 다시 로드 ]
로 활성화 해준다.


JspWriter 가 비활성화 되어있을 경우

[프로젝트 구조 - 라이브러리- "+" - Maven에서... - tomcat-jsp9.0.83 버전 찾아서 확인]

위에 Maven 넣으면 빨갛게 비활성화 되었는데 돌아온다!


연결관리 클래스 작성

//JDBConnect.java
package com.common;

import java.sql.*;

public class JDBConnect {
    public Connection con; // 데이터베이스 연결을 담당
    public Statement stat; // 파라미터 없는 경우 쿼리문 실행할 때 사용
    public PreparedStatement psmt; // 파라미터가 있는 동적 쿼리문을 실행할 때 사용
    public ResultSet rs; // 쿼리 결과문을 담을 때 사용

    // 기본 생성자
    public JDBConnect() {
        try {
            Class.forName("oracle.jdbc.OracleDriver");

            // DB 연결
            String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
            String id = "test";
            String pwd = "bitc5600";

            con = DriverManager.getConnection(url, id, pwd); // db랑 연결 시키기
            System.out.println("DB 연결 성공"); // 오류 없이 연결되면 출력

        } catch (Exception e){
            e.printStackTrace();
        }
    }

    // 연결 해제
    public void close() {
        try {
            if(rs != null) rs.close();
            if(stat != null) stat.close();
            if(psmt != null) psmt.close();
            if(con != null) con.close();

            System.out.println("JDBC 자원 해제");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

JDBC 연결테스트

//ConnectionTest.jsp 
<%@ page import="com.common.JDBConnect" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>JDBC 연결 테스트 01</h2>
<%
    JDBConnect jdbc1 = new JDBConnect();

    jdbc1.close();
%>
</body>
</html>

동작확인(콘솔창)


DB연결 성공(기본 생성자)
JDBC 자원 해제


연결 설정 개선

서버 환경과 관련된 정보들은 한 곳에 관리하는 것이 좋다. web.xml에 입력해놓고 필요할때마다 application 내장 객체를 통해 얻어온다.

web.xml에 컨텍스트 초기화 매개변소()로 입력한다.

web.xml에 오라클 접속 정보 입력

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <context-param> //드라이버 이름
        <param-name>OracleDriver</param-name>
        <param-value>oracle.jdbc.OracleDriver</param-value>
    </context-param>

    <context-param> //접속 URL
        <param-name>OracleURL</param-name>
        <param-value>jdbc:oracle:thin:@localhost:1521:ORCL</param-value>
    </context-param>
    <context-param> //오라클 계정 아이디
        <param-name>OracleId</param-name>
        <param-value>test</param-value>
    </context-param>
    <context-param> //오라클 계정 패스워드 
        <param-name>OraclePwd</param-name>
        <param-value>bitc5600</param-value>
    </context-param>
    <context-param>
        <param-name>INIT_PARAM</param-name>
        <param-value>web.xml에 저장한 초기화 매개변수</param-value>
    </context-param>

  </web-app> 

생성자 1 2 3번

package com.common;

import javax.servlet.ServletContext;
import java.sql.*;

public class JDBConnect {
  public Connection con; // 데이터베이스 연결을 담당
  public Statement stat; // 파라미터 없는 경우 쿼리문 실행할 때 사용
  public PreparedStatement psmt; // 파라미터가 있는 동적 쿼리문을 실행할 때 사용
  public ResultSet rs; // 쿼리 결과문을 담을 때 사용

  // 기본 생성자
  public JDBConnect() {
      try {
          Class.forName("oracle.jdbc.OracleDriver");

          // DB 연결
          String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
          String id = "test";
          String pwd = "bitc5600";

          con = DriverManager.getConnection(url, id, pwd); // db랑 연결 시키기
          System.out.println("DB 연결 성공"); // 오류 없이 연결되면 출력

      } catch (Exception e){
          e.printStackTrace();
      }
  }
  //2번째 생성자
  public JDBConnect(String driver, String url, String id, String pwd){
      try{
          Class.forName(driver);
          con = DriverManager.getConnection(url, id, pwd);

          System.out.println("DB 연결 성공(인수 생성자 1)");
      }catch (Exception e){
          e.printStackTrace();
      }
  }

  //3번째 생성자
  public JDBConnect(ServletContext application){
      try{
          String driver = application.getInitParameter("OracleDriver");
          Class.forName(driver);

          //DB에 연결
          String url = application.getInitParameter("OracleURL");
          String id = application.getInitParameter("OracleId");
          String pwd = application.getInitParameter("OraclePwd");
          con = DriverManager.getConnection(url, id, pwd);
          System.out.println("DB 연결 성공"); // 오류 없이 연결되면 출력
      }catch (Exception e){
          e.printStackTrace();
      }
  }

  // 연결 해제
  public void close() {
      try {
          if(rs != null) rs.close();
          if(stat != null) stat.close();
          if(psmt != null) psmt.close();
          if(con != null) con.close();

          System.out.println("JDBC 자원 해제");
      }catch (Exception e){
          e.printStackTrace();
      }
  }
}
<%@ page import="com.common.JDBConnect" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
  <title>JDBC 연결</title>

<%--    요청이 있을 때마다 DB connection을 새로 연결하고 해제하면 시간이 많이 걸린다.

커넥션 풀 Connection Pool
Connection을 미리 생성해두고 필요할 때 가져다 쓰고 완료되면 반납하는 형식--%>
</head>
<body>
<%--<h2>JDBC 연결 테스트 01</h2>--%>
<%--<%--%>
<%--    JDBConnect jdbc1 = new JDBConnect();--%>

<%--    jdbc1.close();--%>
<%--%>--%>

<%--<h2>JDBC 연결 테스트 02</h2>--%>
<%--<%--%>
<%--    String driver = application.getInitParameter("OracleDriver");--%>
<%--    String url = application.getInitParameter("OracleURL");--%>
<%--    String id = application.getInitParameter("OracleId");--%>
<%--    String pwd = application.getInitParameter("OraclePwd");--%>

<%--    JDBConnect jdbc2 = new JDBConnect(driver, url, id, pwd);--%>

<%--    jdbc2.close();--%>
<%--%>--%>


<h2>JDBC 연결 테스트 03</h2>
<%

  JDBConnect jdbc3 = new JDBConnect(application);

  jdbc3.close();
%>
</body>
</html>

Connection Pool

Connection을 미리 생성해두고 필요할 때 가져다 쓰고 완료되면 반납하는 형식

수정할 것이다.

 //server.xml에 입력, GlobalNamingResoutses안에 입력.
 <Resource auth="Container"
           driverClassName = "oracle.jdbc.OracleDriver"
           type="javax.sql.DataSource"
           initialSize = "0"
           minIdle="5"
           maxTotal ="20"
           maxIdle ="20"
           maxWaitMillis="5000"
           url="jdbc:oracle:thin:@localhost:1521:ORCL"
           name="dbcp_myoracle"
           username="scott"
           password="tiger"/>

<ResourceLink global="dbcp_myoracle"  
              name="dbcp_myoracle" 
             type="javax.sql.DataSource"/>

0개의 댓글