티스토리 뷰

DATABASE/JDBC

[JDBC] PROGRAMMIG STEPS

진심스테이크 2018. 5. 1. 17:32

 

JDBC : Java DataBase Connectivity

- 자바 어플리케이션에서 표준화된 데이터 베이스 접근 제공

- 각 데이터 베이스 접속에 대한 상세한 정보를 알 필요 없음

- 이론적으로는 개발된 어플리케이션에서 DB변경 시 JDBC 드라이버만 교체

 

 

프로그래밍 단계

 

 

연결 정보

- IP 주소 : 오라클이 설치된 컴퓨터의 IP주소 혹은 도메인 이름

- 포트 : 오라클에서 네트워크를 통한 접속을 처리하기 위해 실행되어 있는 리스너의 사용 포트 -> 기본값 : 1521

- SID : 오라클 인스턴스 이름

 

1. JBDC 드라이버 로드

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

- 엑세스 DB인 경우

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);


 

2. 데이터 베이스 연결

Connection conn = DriverManger.getConnection(JDBC_url,”아이디”,”비밀번호”);

- JDBC_URL 구성

JDBC:oracle:thin:@IP주소:포트:SID

 

 

3. Statement 생성

ⓐ Statement 객체 생성 후 SQL 문장을 변수 처리부와 함께 문자열로 구성

  - 쿼리가 복잡해질수록 성능 저하 및 관리 어려움

Statement stmt = conn.createStatement( );
stmt.executeUpdate(“insert into test values(
'"+request.getParameter("username")+"','"+request.getP aramete ("email")+"')");

 

ⓑ PreparedStatement

  - PreparedStatement 객체 생성시, SQL 문장을 미리 생성하고 변수부는 별도의 메소드로 대입하는 방식

  - 성능과 관리면에서 모두 권장되는 방식

PreparedStatement pstmt = conn.prepareStatement(“insert into test values(?,?)”);
pstmt.setString(1,request.getParameter("username");
pstmt..setString(2, request.getParameter("email");
pstmt.executeUpdate();

 

 

4. SQL문 전송

 

 

5. 결과 받기

- 커서 개념의 연결 포인터

- 기본적으로 next( ) 메소드를 통해 로우 이동

ResultSet rs = pstmt.executeQuery( );

while(rs.next()) {
	name = rs.getString(1); // or rs.getString(“name”);
    age = rs.getInt(2); // or rs.getInt(“email”);
}
rs.close();

 

 

6. 연결 해제

- Connection을 close( ) 해주지 않으면 사용하지 않는 연결이 유지됨

- DB 자원 낭비

conn.close( );

 

 


 

 

[프로젝트 파일] -> [WebContent] -> [META-INF] -> context.xml 파일 추가

 

context.xml

<Context>
    <Resource 
        name="jdbc/OracleDB" 
        auth="Container"
        driverClassNaem="oracle.jdbc.driver.OracleDriver" 
        type="javax.sql.DataSource"
        url="jdbc:oracle:thin:@localhost:1521:database" 
        username="scott" <!-- DB 사용 할 계정  -->
        password="tiger" <!-- DB 사용 할 계정 비밀번호 -->
        maxActive="20" 
        maxIdle="10" 
        maxWait="-1" />
</Context>

 

 

[프로젝트 파일] -> [WebContent] -> [WEB-INF] -> [lib] 파일에 있는 web.xml

- <resource-ref> 부분 추가로 입력

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>0430-jdbc</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 추가 -->
  <resource-ref>
    <description>Connection</description>
    <res-ref-name>jdbc/OracleDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  
</web-app>

 


 

 

연결 확인

 

- 방법1

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>

<%
    Connection conn = null;
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:database";
    Boolean connect = false;
    try {
        Class.forName(driver);
        conn = DriverManager.getConnection(url, "scott", "tiger");
        connect = true;
        conn.close();
    } catch (Exception e) {
        connect = false;
        e.printStackTrace();
    }
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>JDBC 연동 테스트 예제</title>
</head>
<body>
    <h3>
        <%
            if (connect == true) {
        %>
        연결되었습니다
        <%
            } else {
        %>
        연결에 실패하였습니다
        <%
            }
        %>
    </h3>
</body>
</html>

 

- 방법2

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
    Connection conn = null;
    try {
        Context init = new InitialContext();
        DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
        conn = ds.getConnection();
        out.println("<h3>연결되었습니다</h3>");
    } catch (Exception e) {
        out.println("<h3>연결에 실패하였습니다</h3>");
        e.printStackTrace();
    }
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

 

 


 

 

테이블 생성

- DB계정 로그인 후, student 테이블 생성

 

 

 

- 데이터 추가

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
    Connection conn = null;
    String sql = "INSERT INTO student(num, name) VALUES(6,'홍길동')";
    
    try {
        Context init = new InitialContext();
        DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
        conn = ds.getConnection();
        Statement stmt = conn.createStatement();

        int result = stmt.executeUpdate(sql);
        if (result != 0) {
            out.println("<h3>레코드가 등록되었습니다</h3>");
        }
    } catch (Exception e) {
        out.println("<h3>레코드 등록에 실패하였습니다</h3>");
        e.printStackTrace();
    }
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

데이터가 추가된 것을 확인 할 수 있다

 

 

- 데이터 여러개 추가

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
    String[] name = { "공씨", "류씨", "변씨" };
    Connection conn = null;
    String sql = "INSERT INTO student(num, name) VALUES(?,?)";

    try {
        Context init = new InitialContext();
        DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
        conn = ds.getConnection();
        PreparedStatement stmt = conn.prepareStatement(sql);

        for (int i = 7; i <= 9; i++) { //홍길동이 6이라서 7부터 시작
            stmt.setInt(1, i);
            stmt.setString(2, name[i - 7]);
            if (stmt.executeUpdate() != 0) {
                out.println("<h3>" + i + "번 레코드 등록 완ㅡ료</h3>");
            }
        }
    } catch (Exception e) {
        out.println("<h3>레코드 등록에 실패하였습니다</h3>");
        e.printStackTrace();
    }
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

데이터가 추가 된 것을 확인 할 수 있다

 

 

- 데이터 불러오기

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
    Connection conn = null;
    String sql = "SELECT * FROM student";

    try {
        Context init = new InitialContext();
        DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/OracleDB");
        conn = ds.getConnection();
        PreparedStatement pstmt = conn.prepareStatement(sql);
        ResultSet rs = pstmt.executeQuery();
        
        while(rs.next()){
            out.println("<h3>"+rs.getInt(1)+". "+rs.getString(2)+"</h3>");
        }
        
        rs.close();
    
    } catch (Exception e) {
        out.println("<h3>데이터 가져오기 실패!</h3>");
        e.printStackTrace();
    }
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

데이터가 출력되는 것을 볼 수 있다

 

 

'DATABASE > JDBC' 카테고리의 다른 글

[JDBC] IMAGE THUMBNAIL  (0) 2018.05.01
[JDBC] FILE UPLOAD  (0) 2018.05.01
[JDBC] 회원가입  (1) 2018.05.01
[JDBC] BASIC THINGS  (0) 2018.04.30
댓글