기타
[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
참고: https://hyeonstorage.tistory.com/111
https://all-record.tistory.com/79
https://nyhooni.tistory.com/71
반응형