Salted Caramel

[수업 24일차-2] 21.09.07 Java와 데이터베이스간의​ 연동, JDBC(Java DataBase Connectivity) 본문

coding/[2021.08.02~2022.01.24] 수업복습

[수업 24일차-2] 21.09.07 Java와 데이터베이스간의​ 연동, JDBC(Java DataBase Connectivity)

꽃무늬라떼 2021. 9. 8. 09:00

try {
// 1. 오라클 드라이버 로딩
// ==> 동적으로 로딩 : 프로그램 실행 시에 드라이버를 로딩한다는 의미.

Class.forName(driver);
System.out.println("드라이버 로딩 성공!!!");

// 2.데이터베이스와 연결
con = DriverManager.getConnection(url, user, password);

if(con != null) {
System.out.println("데이터베이스와 연결 성공~~~");

 


*JDBC(Java DataBase Connectivity)
  - Driver를 통한 자바와 데이터베이스에 연결 및 작업을 하기 위한 것이 주된 목적임.
  - JDBC는 자바 표준 인터페이스임. - JDBC API를 사용함.
  - JDBC는 자바와 데이터베이스 간의 통신 역할을 해 줌. - 중계적 역할을 함.
  
  *JDBC 주요 인터페이스
  -java.sql.Driver : 데이터베이스에서 사용되는 드라이버 인터페이스.
  -java.sql.Connection : 데이터베이스 연결 정보를 가지고 있는 인터페이스.
  -java.sql.PreparedStatement : statement 인터페이스의 서브 인터페이스.
                          데이터베이스에 SQL문을 전송하는 방법을 알고 있는 인터페이스.
  -java.sql.ResultSet : 데이터베이스의 실행 결과를 가지고 있는 인터페이스.
  
  * 오라클 DB를 Java에 연결하는 방법
  1. 물리적인 드라이버 설치
     -JDBC 라이브러리를 이용한 DB에 연결하기 위해서는 해당 DB 프로그램의 기능을 
             수행하는 외부 라이브러리 파일을 프로젝트에 추가해 주어야 DB를 연결할 수 있음. 
     - 오라클 드라이버 파일(C:\app\컴퓨터이름\product\18.0.0\dbhomeXE\jdbc\lib)
               폴더 안에 있는 ojdbc8.jar 파일을 프로젝트에 포함시켜 주면 됨.
     - 주요 데이터베이스에 대한 JDBC 드라이버에 해당하는 클래스.
        Oracle : oracle.jdbc.driver.OracleDriver
        MySQL : comm.mysql.jdbc.Driver
        
  2. JDBC URL
  - 각각의 웹사이트를 구분할 때 http://www.naver.com, http://www.daum.net
         같은 URL을 사용함. 이와 비슷하게 데이터베이스를 구분할 때도 URL과 비슷한 형식을
         갖는 JDBC URL을 사용함
     * 오라클 URL ==> jdbc:oracle:thin:@host 주소:port번호:데이터베이스 식별자(SID)
     * 참고로 오라클 드라이버는 thin 드라이버와 oci 드라이버가 있음.
     - thin 드라이버는 자바 언어로만 구현된 jdbc 드라이버로 jdk만 설치되어
                있으면 어디든지 사용이 가능함.
     -oci 드라이버는 모듈을 설치해 주어야 사용이 가능한 드라이버.
     
   3. 드라이버 로딩
       - 포함된 라이브러리를 바탕으로 해당 오라클 드라이버를 메모리로 업로드를 시켜주어야 함.
       - 드라이버를 메모리로 업로드 시키는 방법은 Class.forName(드라이버 파일) 메서드를 이용함. 
       - 특정 클래스를 로딩하면 자동으로 객체가 생성이 되고, DriverManager에 등록이 됨.
                    일반적으로 드라이버 클래스들은 로드될 때 자신의 인스턴스를 생성하고, 자동적으로 
         DriverManager 클래스 메서드를 호출하여 그 인스턴스를 등록을 함.
       - 이 메서드는 Class라는 클래스에 포함되어 있으며, 해당 파일 경로에 위치한 파일을 
                    동적으로 프로그램이 실행될 때 메모리 상에 업로드 시키는 기능을 수행함.
   4. 커넥션 연결
       - 설치된 드라이버를 메모리 상에 업로드 시키면 이제 DB를 지금 사용하는 프로그램과
         연결을 시켜 주어야 함. 이러한 연결을 시켜 주는 것을 커넥션(Connection)이라고 함.
         - DriverManager 클래스는 데이터 원본에 JDBC 드라이버를 통하여 커넥션을 만드는 역할을 함.
         - DriverManager 클래스의 getConnection() 메서드를 이용하여 자신이 사용하는
           오라클 정보를 인자로 전달하여 연결을 수행하게 됨.
           - 오라클에 접속하기 위해서는 오라클의 정보(오라클 서버의 IP, 리스너 포트 , 오라클 계정,
           계정의 비밀번호) 를 알아야함. 
           
           
           *실제 연결 순서
           1. 오라클 드라이버 로딩.
           2. 데이터베이스 커넥션 구함.
           3. 쿼리 실행을 위한 PreparedStatement 객체 생성.
           4. 쿼리 실행.
           5. 쿼리 실행 결과를 사용.
           6. 쿼리 종료.
           7. PreparedStatement 사용 종료
           8. 데이터베이스....
 
       
      


 

package sist;

import java.sql.*;

public class Select {

	public static void main(String[] args) {
		Connection con = null;            //DB와 연결하는 객체
		
		PreparedStatement pstmt = null;   // SQL문을 전송하는 객체
		
		ResultSet rs = null;              // SQL문의 실행 결과를 가지고 있는 객체
		
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		
		String user = "web";
		
		String password = "1234";
		
		
		
		try {
			// 1. 오라클 드라이버 로딩
			// ==> 동적으로 로딩 : 프로그램 실행 시에 드라이버를 로딩한다는 의미.
			
			Class.forName(driver);
			System.out.println("드라이버 로딩 성공!!!");
			
			// 2.데이터베이스와 연결
			con = DriverManager.getConnection(url, user, password);
			
			if(con != null) {
				System.out.println("데이터베이스와 연결 성공~~~");
			}
			
			// 3. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성
			String sql = "select * from memo order by bunho desc";
			
			pstmt = con.prepareStatement(sql);
			
			// 4. 데이터베이스에 SQL문을 전송.
			rs = pstmt.executeQuery();  // 실제로 DB에서 SQL문을 실행하는 메서드.
			
			System.out.println("번호\t제목\t작성자\t내용\t작성일");
			System.out.println("--------------------------------------------");
			
			// 5. 데이터를 가져와서 출력
			while(rs.next()) {
				int bunho = rs.getInt("bunho");
				String title = rs.getString("title");
				String writer = rs.getString("writer");
				String content = rs.getString("content");
				String regdate = rs.getString("regdate").substring(0, 10);
				
				System.out.println(bunho + "\t"+title+"\t"+writer+"\t"+content+"\t"+regdate);
				System.out.println("------------------------------------------");
			}
			// 6. 연결되어 있는 객체들은 종료를 해 주어야 한다.
			rs.close(); pstmt.close(); con.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
package sist;

import java.sql.*;
import java.util.Scanner;

public class Insert {

	public static void main(String[] args) {
		
		Connection con = null;           //DB와 연결 객체
		
		PreparedStatement pstmt = null;   //SQL문을 전송하는 객체
		
		ResultSet rs = null;              // SQL문의 실행 결과를 가지고 있는 객체
		
		String driver = "oracle.jdbc.driver.OracleDriver";

		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		
		String user = "web";
		
		String password = "1234";
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("메모 제목 : ");
		String title = sc.nextLine();
		
		System.out.print("메모 작성자 : ");
		String writer = sc.nextLine();
		
		System.out.print("메모 내용 : ");
		String content = sc.nextLine();
		
		
	
		try {
			// 1. 오라클 드라이버 로딩
			Class.forName(driver);
			
			// 2. 데이터베이스와 연결.
			con = DriverManager.getConnection(url, user, password);
			
			// 3. 데이터베이스에 SQL문을 전송하기 위한 쿼리문 작성.
			String sql = "insert into memo values(memo_seq.nextval,?,?,?,sysdate)";
			
			pstmt = con.prepareStatement(sql);
			
			pstmt.setString(1, title);
			
			pstmt.setString(2, writer);
			
			pstmt.setString(3, content);
			
			// 4. 데이터베이스에 SQL문을 전송.
			//    SQL문이 select SQL문인 경우 executeQuery() 메서드를 이용.
			// ==> 반환형이 resultSet형
			//   - SQL문이 select가 아닌 insert, update, delete SQL문인 경우
			//     executeUpdate() 메서드를 이용 ==> 반환형이 int형
			//     반환형이 int인 이유 : 행 삽입, 행 수정, 행 삭제 갯수를 표현한 것.
			//     SQL문이 성공적으로 실행이 되면 반환되는 값은 1이라는 값이 반환이 됨.
			
			int result = pstmt.executeUpdate();  // DB에 데이터 추가 진행
			
			if(result >0) {
				System.out.println("데이터 추가 성공!!!");
			}else {
				System.out.println("데이터 추가 실패~~~");
			}
			
			// 5. 연결된 객체 종료하기
		
			pstmt.close();con.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		
	}
	
	
	

}