byeolsub 2023. 4. 19. 17:17
- JDBC (Java Database Connectivity)
    : [자바](<https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)>)에서 [데이터베이스](<https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4>)에 접속할 수 있도록 하는 [자바 API](<https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_API>)이다.
      JDBC는 데이터베이스에서 자료를 쿼리(요청명령)하거나 업데이트하는 방법을 제공한

- JDBC 드라이버
    : DBMS와 통신을 담당하는 자바 클래스
      DBMS 별로 알맞은 JDBC  드라이버 필요 <- 보통 jar 파일로 제공
      JDBC 드라이버 로딩 <- DBMS와 통신하기 위해서는 먼저 로딩 필요
                            로딩코드 : Class.forName(”JDBC드라이버 클래스의 완전한 이름”);다.

- JDBC URL
    : DBMS와의 연결을 위한 식별 값
      JDBC 드라이버에 따라 형식이 다름
      일반적인 구성 -jdbc:[DBMS]:[데이터베이스식별자]

 

  • JDBC 클래스는 자바 패키지 - java.sql 과 javax.sql에 포함되어 있다.
JDBC 사용 순서

1. 드라이버 클래스 로드 
     : Class.forName("클래스명")
2. db와 연결하는 객체 
     : Connection conn = DriverManager.getConnection("url","userid","pw"
3. db에 sql구문전달 객체 
     : Statement stmt = conn.createStatement()
4. 명령실행 후 db로 부터 결과 수신
     : ResultSet rs = stmt.executeQuery (sql문장 : select)
        int cnt = stmt.executeUpdate (sql문장 : select 외)
             cnt : 변경된 레코드의 갯수 리턴

 

📌 jdbc1.jsp - DB연결

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- /jsp2/src/main/webapp/jdbc/jdbc1.jsp --%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DB 연결</title>
</head>
<body>
<%
   **//OracleDriver 클래스 로드** 
   Class.forName("oracle.jdbc.driver.OracleDriver");

   **//Connection 객체 : 오라클과 접속하는 객체** 
   Connection conn = DriverManager.getConnection
		   ("jdbc:oracle:thin:@localhost:1521:xe","kic","1234");
   out.println("오라클 접속 성공");

   **//Statement : sql 문장을 데이터베이스에 명령문 전달 객체** 
   Statement stmt = conn.createStatement();

**   //ResultSet : select 문장의 결과 데이터를 저장하는 객체** 
   ResultSet rs = stmt.executeQuery("select * from emp");
%>
<table><tr><td>사원번호</td><td>사원명</td><td>업무</td><td>급여</td></tr>
<%--
   rs.next() : 한개의 행을 조회하고 true 리턴 
               조회할 행이 없으면 false 리턴 
   rs.getString(컬럼명|컬럼순서) : 컬럼값을 문자열로 리턴               
 --%>
<% while(rs.next()) {%>
<tr><td><%=rs.getString("empno") %></td>
    <td><%=rs.getString("ename") %></td>
    <td><%=rs.getString("job") %></td>
    <td><%=rs.getString("sal") %></td>
</tr>
<% } %>
</table></body></html>

 

 

📌 emp 테이블의 모든 정보 조회하기

<%@page import="java.sql.ResultSetMetaData"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- /jsp2/src/main/webapp/jdbc/jdbc2.jsp
  css 위치: webapp/css/main.css 
--%>
<%--
   JDBC 사용 순서
   1. 드라이버 클래스 로드 : Class.forName("클래스명")
   2. db와 연결하는 객체 : 
   Connection conn = DriverManager.getConnection("url","userid","pw")
   3. db에 sql구문전달 객체 
   Statement stmt = conn.createStatement()
   4. 명령실행 후 db로 부터 결과 수신
     ResultSet rs = stmt.executeQuery(sql문장:select)
          int cnt = stmt.executeUpdate(sql문장:select외)
          cnt : 변경된 레코드의 갯수 리턴
 --%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>emp 테이블의 모든 정보 조회하기</title>
<link rel="stylesheet" href="../css/main.css">
</head>
<body>
<%
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection
		   ("jdbc:oracle:thin:@localhost:1521:xe","kic","1234"); 
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp");
//ResultSetMetaData : 조회된 컬럼의 정보 저장
ResultSetMetaData rsmt = rs.getMetaData();
%>
<table><tr>
<%
/*
  getColumnCount() : 조회된 컬럼의 갯수
  getColumnName(i) : 조회된 컬럼명의 순서대로 조회컬럼 리턴. 1번 인덱스 부터 시작
*/	
  for(int i=1;i<=rsmt.getColumnCount();i++) {
%>
<th><%=rsmt.getColumnName(i) %></th> <%-- 컬럼명 출력 --%>
<% } %></tr>
<%-- 데이터 부분 출력 --%>
<% while(rs.next())  {%>
<tr> <%-- 컬럼값 출력 --%>
<% for(int i=1;i<=rsmt.getColumnCount();i++) {%>
  <td><%=rs.getString(i) %></td> <%-- rs.getString(컬럼순서) --%>
<% } %>  
</tr>
<% } %>
</table>
</body>
</html>