기타

[JSP] JDBC 프로그래밍 파악하기

dev_beom_12 2019. 6. 25. 12:47
반응형

JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

 

설명을 다 보기에 바쁘신분들은 제일 하단 인용 윗부분에 소스코드 참조하셔서 쿼리 돌려보세요 

1. DriverManager 클래스

  • JDBC 드라이버의 가장 기본적인 서비스이다.
  • 데이터 원본에 JDBC 드라이버를 통해 커넥션을 만드는 역할
  • 아래와 같이 특정 클래스를 로딩하게되면 자동으로 객체가 생성되며 DriverManager에 등록
Class.forName("com.mysql.jdbc.Driver") 
  • 자바에서 작성한 쿼리문을 연동하는데 기본적으로 이용, 데이터 베이스 연동에도 사용

   - 데이터 베이스 연동 

   - DriverManager 클래스는 Connection 인터페이스의 구현 객체를 생성하는데 아래와 같은

     getConnection() 메소드를 사용

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/app", "app" , "app!00");

   - 쿼리문 연동

Connection con = null;
con = DriverManager.getConnection(sql);

 

리눅스커널이 다양한 입출력장치 드라이버를 관리하듯  

DriverManager는 JDBC 드라이버를 사용하기위해 선행되는 클래스 선언이라고 생각을 합니다.

 

2. Connection 인터페이스

  • 데이터베이스와 연결하는 객체
  • DriverManager.getConnection(연결문자열, DB_ID, DB_PW)으로 Connection 객체 생성
  • 연결문자열(Connection String) - "jdbc:Driver 종류://IP:포트번호/DB명"

위 1.DriverManager 클래스 안에 보이는 '데이터 베이스 연동' 사진을 참고하시면 될 것 같습니다.

3. Statement 인터페이스

  • SQL 질의문을 전달하는 역할
  • 사용시 try-catch문 또는 threows 처리를 해야한다.
  • 정적인 쿼리문을 처리할 수 있다. 즉 쿼리문에 값이 미리 입력되어 있어야 한다.
  • Statement 객체 생성후 executeQuery() 메소드를 호출하여 SQL을 실행
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
 
public class StatementTest 
{
    public static void main(String args[])
    {
        Connection conn = null; // DB연결된 상태(세션)을 담은 객체
        Statement stm = null;  // SQL 문을 나타내는 객체
        
        try {
            conn = DBConnection.getConnection();
            stm = conn.createStatement();
            
            String quary = "INSERT INTO TEST VALUES('id1', 'pw1', 'name1')";
            int success = stm.executeUpdate(quary);
            
            if(success > 0)
                System.out.println("데이터 입력 성공");
            else
                System.out.println("데이터 입력 실패");
 
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
    }
}


출처: https://all-record.tistory.com/79 [세상의 모든 기록]

 

4. PreparedStatement 인터페이스

  • Connection 객체의 preparedStatement() 메소드를 사용하여 생성.
  • SQL문을 담을 String 객체가 필요하다.
  • Statement 객체의 SQL은 실행마다 서버에서 분석해야하나, PreparedStatement 객체는 한 번 분석되면 재사용이 용이하다.
  • 동일한 SQL문을 특정 값만 바꾸어 여러번 실행할 경우 유용하다.
  • ResultSet 을 이용한 결과값 존재여부 확인 (2019-07-04 추가)
ResultSet rs = null;
.
.
.
.
try{
 String sql = "쿼리";
 stmt = conn.prepareStatement(sql);
 rs = stmt.executeQuery();
 
 if(rs.next()){
   out.println("TRUE");  
 }else{
   out.println("FALSE");
 }
 
}catch(SQLException sqlex){
}

쿼리의 결과로 출력된 결과 테이블에 행이 하나라도 존재할 경우 rs.next() 부분을 진행하게된다. 

 

 

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
 
public class PreparedStatementTest 
{
    public static void main(String args[])
    {
        Connection conn = null; // DB연결된 상태(세션)을 담은 객체
        PreparedStatement pstm = null;  // SQL 문을 나타내는 객체
        
        try {
            
            String quary = "INSERT INTO TEST VALUES(?, ?, ?)";
            
            conn = DBConnection.getConnection();
            pstm = conn.prepareStatement(quary);
            
            // 쿼리에 값을 세팅한다.
            // 여기서 1, 2, 3은 첫번째, 두번째, 세번째 위치홀더 라는 뜻
            pstm.setString(1, "id2");
            pstm.setString(2, "pw2");
            pstm.setString(3, "name2");
            
            int success = pstm.executeUpdate();
            
            if(success > 0)
                System.out.println("데이터 입력 성공");
            else
                System.out.println("데이터 입력 실패");
 
            
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
    }
}


출처: https://all-record.tistory.com/79 [세상의 모든 기록]

 

 

5. CallableStatement 인터페이스

  • Stored Procedure(저장된 프로시저)를 호출하기 위해 존재하는 객체
  • PreparedStatement 객체를 상속받아서 사용한다.
  • set 메소드를 PreparedStatement 객체에서 사용할때와 같이 사용가능하다.
  • registerOutParameter() 메소드는 프로시저에서 넘어오는 값을 반환받기 위해 꼭 사용해야함.

 

6. ResultSet 인터페이스

  • 쿼리에서 Select 문을 사용한 질의에 대해 성공시 ResultSet을 반환
  • 질의에 대한 결과 테이블을 담고 있으며 커서(Cursor)를 통해 참조 조작 가능 
  • first() : 커서를 첫 행으로 이동
  • last() : 커서를 마지막 행으로 이동
  • beforeFirst() : 커서를 첫번째 행 이전으로 이동
  • afterLast() : 커서를 마지막 행 다음으로 이동
  • ★ next() : 커서를 다음 행으로 이동
    // 본인은 해당 next()를 많이 이용한다
while(rs.next()){  	
  		get_NUM	= rs.getString("NUM");
  		get_NAME = rs.getString("NAME");
  		get_TYPE = rs.getString("TYPE");
}
  • previous() : 커서를 이전 행으로 이동

 


급한분들을 위한 전체 소스코드

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page contentType="text/xml; charset=UTF-8" %>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>


<% 
    Statement stmt = null;
    ResultSet rs = null;   
	Class.forName("com.mysql.jdbc.Driver"); 
	Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/app", "app" , "apptest"); 
	 
	String Key = request.getParameter("Key"); //url로 부터 전달받은 파라미터
			
	
	String sql =" 쿼리 부분 ";
			
	String get_NUM="";
		
	stmt = conn.createStatement();
	rs = stmt.executeQuery(sql);
%>
<top>
<%
  	while(rs.next()){  	
  		get_NUM	= rs.getString("NUM");  		
%>
			<head>		
			<NUM><![CDATA[<%=get_NUM%>]]></NUM>		               
			</head>	
<%}%>
</top>

8. 인용

https://ko.wikipedia.org/wiki/JDBC

 

JDBC - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. 썬 마이크로시스템즈는 1997년 2월 19일 JDBC를 JDK 1.1의 일부로 출시하였다.[1] 그 뒤로 이제까지 자바 SE의 일부로 되고 있다. JDBC 클래스는 자바 패키지 java.sql과

ko.wikipedia.org

참고: https://hyeonstorage.tistory.com/111

 

[JSP] JDBC 프로그래밍에 사용되는 객체

JDBC 프로그래밍에 사용되는 객체 1. DriverManager 클래스 - DriverManager 클래스는 데이터 원본에 JDBC 드라이버를 통하여 커넥션을 만드는 역할을 한다. DriverManager는 Class.forName() 메소드를 통해서 생..

hyeonstorage.tistory.com

https://all-record.tistory.com/79

 

자바 정적쿼리와 동적쿼리 - Statement, PreparedStatement

자바에서 데이터베이스로 쿼리문을 전송할 때 사용할 수 있는 인터페이스가 2가지 있다. Statement와 PreparedStatement이다. 둘다 쿼리 전송기능을 가지고 있지만 차이점이 있다. 어떤 점이 차이가 나고, 어느..

all-record.tistory.com

https://nyhooni.tistory.com/71

 

JDBC 연동시 필수 지식(Statement, PreparedStatement, Stored Procedure, CallableStatement, ResultSet, ResultSetMetaData)

JDBC 필수 지식 출처 : 기초부터 활용까지 JSP 2.1 MVC 패턴을 이용한 실전 프로젝트 완벽 공개 Statement 실제 데이터베이스에 쿼리를 보내기 위해 필요한 객체이다. 삽입, 수정, 삭제, 검색을 처리하는 DML문을..

nyhooni.tistory.com

 

반응형