JDBC 프로그래밍 (D-90)

최우정·2022년 5월 30일
0

100일

목록 보기
11/17
post-thumbnail

📒 1. JDBC 프로그래밍

✏️ JDBC 프로그래밍 과정

JDBC를 연동하기 위해서는 드라이버를 로드하고 JDBC URL로 접속하여 Connection 객체를 얻어오는 단계를 거쳐야 한다.

①. JDBC드라이버 로드 및 데이터베이스를 연결한다.
②. SQL문을 실행한다.
③. ResultSet 객체를 처리한다.
④. 자원 객체를 닫는다.

✏️ ①. JDBC드라이버 로드 및 데이터베이스를 연결한다.

📝 JDBC드라이버 로드 및 데이터베이스 연결

  • mariaDB드라이버의 경우 다음 실행문으로 드라이버를 메모리에 로드
    Class.forName("org.mariadb.jabc.Driver");

  • 데이터베이스와 연결해 Connection 객체 생성
    Connection con = DriverManager.getConnection(url, user_id, passwd);

여기서 url은 다음 형식: jdbc:mysql://localhost:3306/testdb

📝 JDBC드라이버 로드 및 데이터베이스 연결: ① 자바

package jdbc_test;

import java.sql.*;

public class jdbc_test {
	public static void main(String[]args) {
		String driver = "org.mariadb.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/testdb3";
		
		try {
			// 1. 데이터베이스(mariaDB)드라이버 로드
			Class.forName(driver);
			
			// 2. 드라이버 매니저 연결 + 커넥션 객체 생성
			Connection conn = DriverManager.getConnection(url, "java", "java");
			
			conn.close();
		}
		catch(SQLException e) {
			e.printStackTrace();
		} 
		catch(ClassNotFoundException e) {
			System.out.println("JDBC 드라이버를 로드할 수 없습니다.");
//			e.printStackTrace();
		}
	}
}

📝 JDBC드라이버 로드 및 데이터베이스 연결: ② JSP

<%@page import="java.sql.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Connection conn = null;
	String driver = "org.mariadb.jdbc.Driver";
	String url = "jdbc:mysql://localhost:3306/testdb3";
	
	try {
		// 1. 데이터베이스(mariaDB) 드라이버 로드
		Class.forName(driver);
		
		//  2. 드라이버 매니저 연결 + 커넥션 객체 생성
		conn = DriverManager.getConnection(url,"java","java");
		
		conn.close();
		out.println("DB 연결 성공");
		
		}
	catch (Exception e) {	
//		e.printStackTrace();
		out.println("DB 연결 실패");
		}
%>

✏️ ②. SQL문을 실행한다.

📝 SQL문 실행: ① Statement 객체 이용

SQL 문을 DBMS에 전송할 수 있는 Statement 객체 생성

Statement stmt = con.createStatement();

SQL문 불러오기

package jdbc_test;

import java.sql.*;

public class jdbc_test {
	public static void main(String[]args) {
		String driver = "org.mariadb.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/testdb3";
		
		try {
			// 1. 데이터베이스(mariaDB)드라이버 로드
			Class.forName(driver);
			
			// 2. 드라이버 매니저 연결 + 커넥션 객체 생성
			Connection conn = DriverManager.getConnection(url, "java", "java");
			
			// 3. Statement 객체 생성
			Statement stmt = conn.createStatement();
			
			String sql = "SELECT * FROM member";
			ResultSet rs = stmt.executeQuery(sql);
			
			System.out.println("+----------------+");
			while(rs.next()){
				String id = rs.getString("id");
				String name = rs.getString("name");
				int level = rs.getInt("level");
				System.out.println(id + " | " + name + " | " + level);
			}
			System.out.println("+----------------+");
			
			System.out.println("DB 연결 성공");
		}
		catch(SQLException e) {
			e.printStackTrace();
		} 
		catch(ClassNotFoundException e) {
			System.out.println("JDBC 드라이버를 로드할 수 없습니다.");
//			e.printStackTrace();
		}
	}
}

Statement 인터페이스가 제공하는 주요 메서드

✏️ ③. ResultSet 객체를 처리한다.

📝 ResultSet 객체를 처리한다.

결과 집합의 처리

ResultSet은 SQL문의 결과물을 추상화한 인터페이스
예를 들어 SELECT name, phone FROM person;의 결과 집합

INSERT

package jdbc_test;

import java.sql.*;

public class jdbc_test {
	public static void main(String[]args) {
		String driver = "org.mariadb.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/testdb3";
		
		try {
			// 1. 데이터베이스(mariaDB)드라이버 로드
			Class.forName(driver);
			
			// 2. 드라이버 매니저 연결 + 커넥션 객체 생성
			Connection conn = DriverManager.getConnection(url, "java", "java");
			
			// 3. Statement 객체 생성
			Statement stmt = conn.createStatement();
			
			/* 데이터 추가 INSERT */
			String insertSql = "INSERT INTO member(id, name, level) VALUES ('tiger', '호랭이', 3)";
			ResultSet rs = stmt.executeQuery(insertSql);
			
			String sql = "SELECT * FROM member";
//			ResultSet rs = stmt.executeQuery(sql);
			
			while(rs.next()){
				String id = rs.getString("id");
				String name = rs.getString("name");
				int level = rs.getInt("level");
				System.out.println(id + " | " + name + " | " + level);
			}
			
			System.out.println("DB 연결 성공");
		}
		catch(SQLException e) {
			e.printStackTrace();
		} 
		catch(ClassNotFoundException e) {
			System.out.println("JDBC 드라이버를 로드할 수 없습니다.");
//			e.printStackTrace();
		}
	}
}

UPDATE

package jdbc_test;

import java.sql.*;

import javax.swing.JOptionPane;

public class jdbc_test {
	public static void main(String[]args) {
		String driver = "org.mariadb.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/testdb3";
		
		try {
			// 1. 데이터베이스(mariaDB)드라이버 로드
			Class.forName(driver);
			
			// 2. 드라이버 매니저 연결 + 커넥션 객체 생성
			Connection conn = DriverManager.getConnection(url, "java", "java");
			
			// 3. Statement 객체 생성
			Statement stmt = conn.createStatement();
			

			/* 데이터 수정 UPDATE */
			String updateSql = "UPDATE member SET level=5 WHERE id='tiger' ";
			ResultSet rs = stmt.executeQuery(updateSql);

			String sql = "SELECT * FROM member";
			
			while(rs.next()){
				String id = rs.getString("id");
				String name = rs.getString("name");
				int level = rs.getInt("level");
				System.out.println(id + " | " + name + " | " + level);
			}
			
			System.out.println("DB 연결 성공");
		}
		catch(SQLException e) {
			e.printStackTrace();
		} 
		catch(ClassNotFoundException e) {
			System.out.println("JDBC 드라이버를 로드할 수 없습니다.");
//			e.printStackTrace();
		}
	}
}

DELETE

package jdbc_test;

import java.sql.*;

public class jdbc_test {
	public static void main(String[]args) {
		String driver = "org.mariadb.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/testdb3";
		
		try {
			// 1. 데이터베이스(mariaDB)드라이버 로드
			Class.forName(driver);
			
			// 2. 드라이버 매니저 연결 + 커넥션 객체 생성
			Connection conn = DriverManager.getConnection(url, "java", "java");
			
			// 3. Statement 객체 생성
			Statement stmt = conn.createStatement();
			
//			/* 데이터 삭제 DELECT */
			String deleteSql = "DELETE FROM member WHERE id='tiger' ";
			ResultSet rs = stmt.executeQuery(deleteSql);
			
			String sql = "SELECT * FROM member";
//			ResultSet rs = stmt.executeQuery(sql);
			
			while(rs.next()){
				String id = rs.getString("id");
				String name = rs.getString("name");
				int level = rs.getInt("level");
				System.out.println(id + " | " + name + " | " + level);
			}
			
			System.out.println("DB 연결 성공");
		}
		catch(SQLException e) {
			e.printStackTrace();
		} 
		catch(ClassNotFoundException e) {
			System.out.println("JDBC 드라이버를 로드할 수 없습니다.");
//			e.printStackTrace();
		}
	}
}

ResultSet 인터페이스가 제공하는 주요 메서드

📒 2. 커넥션 풀(Connection Pool)

✏️ JNDI의 개요

JNDI(Java Naming and Directory Interface)란 명명서비스 및 디렉터리 서비스에 접근하기 위한 API를 말한다. 즉, 특정한 자원에 접근하기 위한 이름으로 사용된다.

profile
비전공자 Java, JavaScript, Html, Css, C++ 공부중

0개의 댓글