๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

[JDBC] ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ดํด๋ฆฝ์Šค ์—ฐ๋™ (2023.04.17) ๋ณธ๋ฌธ

full stack/JAVA

[JDBC] ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ดํด๋ฆฝ์Šค ์—ฐ๋™ (2023.04.17)

Shinjio 2023. 4. 17. 20:10

๐ŸŽˆ JDBC(Java DataBase Connectivity)

์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ” API

JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Java์—์„œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ณ  SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ

 

๐Ÿ“– JDBC Driver

JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ข…๋ฅ˜๋‚˜ ๋ฒค๋”์— ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์„ฑ๋œ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Œ. 

 

๐Ÿ“– JDBC ํ๋ฆ„ ์ˆœ์„œ

 

โš™๏ธ JDBC Driver ๋กœ๋“œ 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒค๋”๊ฐ€ ์ œ๊ณตํ•˜๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•จ. 

๋“œ๋ผ์ด๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๊ณ , JDBC API๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ

 

โ‘  ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

     : ํ”„๋กœ์ ํŠธ ์šฐํด๋ฆญ > Build Path > Configure Build Path 

 

 

โ‘ก Libraries > Classpath > Add External Jars...

 

โ‘ข sql developer - jdbc - ojdbc8 ์„ ํƒ

 

โš™๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ

โ‘  Windows > Show View > Other

 

โ‘ก data ๊ฒ€์ƒ‰ > Data Source Explorer ํด๋ฆญ 

 

โ‘ข Database Connections ์šฐํด๋ฆญ > New...

 

โ‘ฃ Oracle ์„ ํƒ

โ‘ค Oracle Thin Driver 11 ์„ ํƒ 

 

โ‘ฅ JAR List > ๊ธฐ์กด Driver files ์‚ญ์ œ > Add JAR/ZIP... > [ sqldeveloper/jdbc/lib/ojdbc8 ] ์„ ํƒ  

 

โ‘ฆ Properties > Connection URL, Name, Password, ID ์ž…๋ ฅ

 

โ‘ง name, password ์ž…๋ ฅํ›„ Test Connection > ์„ฑ๊ณตํ•˜๋ฉด Finish

 

โš™๏ธ SQL ์‹คํ–‰

 

1. DB์—ฐ๊ฒฐ

		//1.DB ์—ฐ๊ฒฐ
		Connection conn = null;
		
		
		try {//DB๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค ๊ฐ€์ ธ์˜ค๊ธฐ
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//DB์—ฐ๊ฒฐ์‹œ ํ•„์š”ํ•œ ๊ฐ’ (URL, ID, PW)
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String id = "";
			String pw = "";
			
			//DB ์ ‘์†
			conn = DriverManager.getConnection(url, id, pw);
			
			System.out.println("์ ‘์†์„ฑ๊ณต");
			
		} catch (ClassNotFoundException | SQLException e) {
			System.out.println("์ ‘์†์‹คํŒจ");
			e.printStackTrace();
			
		}

 

2. ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰

		//์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฐ์ฒด
		//java์—์„œ ๋ฌธ์ž์—ด๋กœ ๋œ ์ฟผ๋ฆฌ๋ฌธ์„ Oracle์˜ ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์‹คํ–‰
		PreparedStatement pstm = null;
        
        Scanner sc = new Scanner(System.in);
		
		System.out.print("์ง์› ์ด๋ฆ„ ์ž…๋ ฅ>>");
		String inputName = sc.next();
		System.out.print("๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ>>");
		String inputPw = sc.next();
		
		//์ฟผ๋ฆฌ๋ฌธ์„ ํ†ตํ•ด์„œ ๋ฐœ์ƒํ•œ ์‘๋‹ต์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
		ResultSet rs = null;
        
		//2. ์ ‘์† ํ›„ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰
		
		//์ฟผ๋ฆฌ๋ฌธ์„ ๋ฌธ์ž์—ด๋กœ ์ €์žฅ
		String sql = "select * from ์ง์› where ์ด๋ฆ„ = ? and ํŒจ์Šค์›Œ๋“œ = ?";
		
		//๋ฌธ์ž์—ด์ธ ์ฟผ๋ฆฌ๋ฌธ์„ Oracle์˜ ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜
		try {
        	//์ฟผ๋ฆฌ๋ฌธ ์ž‘์„ฑ
			pstm = conn.prepareStatement(sql);
			pstm.setString(1, inputName);
			pstm.setString(2, inputPw);
			
            //์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰
			rs = pstm.executeQuery(); //๋ฐ์ดํ„ฐ์„ธํŠธ(์ปฌ๋Ÿผ๋ช…๊นŒ์ง€ ํฌํ•จ)๋ฅผ ๋ฐ˜ํ™˜
			
			while(rs.next()) { //์•„๋ž˜ ํ–‰์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํŒ๋‹จ
				String name = rs.getString("์ด๋ฆ„");
				System.out.println(name);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 

3. DB ์—ฐ๊ฒฐ ์ œ๊ฑฐ

		//3. DB ์—ฐ๊ฒฐ ์ œ๊ฑฐ
		
		try {
			if(rs != null) {
				rs.close();
			}
			if(pstm != null) {
				pstm.close();
			}
			if(conn != null) {
				conn.close();
			}
		}catch(SQLException e){
			e.printStackTrace();
		}

 

์ „์ฒด ์ฝ”๋“œ

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

import oracle.security.o3logon.a;

public class JDBCํšŒ์›๊ฐ€์ž… {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.print("์ง์› ์ด๋ฆ„ ์ž…๋ ฅ >> ");
		String inputName = sc.next();
		System.out.print("๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ >> ");
		String inputPw = sc.next();
		System.out.print("์„ฑ๋ณ„ ์ž…๋ ฅ >> ");
		String inputGender = sc.next();
		System.out.print("๋‚˜์ด ์ž…๋ ฅ >> ");
		int inputAge = sc.nextInt();
		System.out.print("์—ฐ๋ด‰ ์ž…๋ ฅ >> ");
		int inputMoney = sc.nextInt();
		
		//1.DB ์—ฐ๊ฒฐ 
		Connection conn = null;
		
		//์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฐ์ฒด 
		//Java์—์„œ ๋ฌธ์ž์—ด๋กœ ๋œ ์ฟผ๋ฆฌ๋ฌธ์„ Oracle์˜ ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์‹คํ–‰์‹œ์ผœ ์ฃผ๋Š” ๊ฐ์ฒด
		PreparedStatement pstm = null;
		
		//์ฟผ๋ฆฌ๋ฌธ์„ ํ†ตํ•ด์„œ ๋ฐœ์ƒํ•œ ์‘๋‹ต์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
		ResultSet rs = null;

		try {//forName ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ Class๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
			//DB๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค ๊ฐ€์ ธ์˜ค๊ธฐ
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//์—ฐ๊ฒฐ์‹œ ํ•„์š”ํ•œ ๊ฐ’ (url, id, pw)
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String id = "service";
			String pw = "12345";
			
			//oracledb์—์„œ id, pw ์น˜๊ณ  ์—”ํ„ฐ์นœ๊ฑฐ
			//DB ์ ‘์† 
			//DriverManager --> DB์™€ ์—ฐ๊ฒฐ (JAVA, DB ๊ฐ„์˜ ํ†ต๋กœ๋ฅผ ๋งŒ๋“ค์–ด์คŒ!)
			conn = DriverManager.getConnection(url, id, pw);
			System.out.println("์ ‘์† ์„ฑ๊ณต");
			
		} catch (ClassNotFoundException | SQLException e) {
			System.out.println("์ ‘์† ์‹คํŒจ");
			e.printStackTrace();
		}
		
		//2. ์ ‘์† ํ›„ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰
		//(1)๋‚˜์ด๊ฐ€ 40 ์ด์ƒ์ธ ์ง์›์˜ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅ์‹œ์ผœ ์ฃผ์„ธ์š”
		//(2)์œ„์—์„œ ์ž…๋ ฅ๋ฐ›์€ name, pw๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹นํ•˜๋Š” ์ง์›์˜ ๋‚˜์ด๋ฅผ ์ถœ๋ ฅ์‹œ์ผœ ์ฃผ์„ธ์š”. 
		try {
			//๋‚˜์ด๊ฐ€ 40์‚ด ์ด์ƒ์ธ ์ง์›์˜ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅ์‹œ์ผœ์ฃผ์„ธ์š”!
//			String sql = "select ์ด๋ฆ„, ๋‚˜์ด, ๋น„๋ฐ€๋ฒˆํ˜ธ from ์ง์› where ๋‚˜์ด >= 40";
//			String sql = "select * from ์ง์› where ์ด๋ฆ„ = '" + inputName + "'and ๋น„๋ฐ€๋ฒˆํ˜ธ = '" + inputPw + "'";
//			String sql = "select * from ์ง์› where ์ด๋ฆ„ = ? and ๋น„๋ฐ€๋ฒˆํ˜ธ = ?";
		//(3)์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์„ฑ๋ณ„, ๋‚˜์ด, ์—ฐ๋ด‰ ์ž…๋ ฅ๋ฐ›์•„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!
			String sql = "insert into ์ง์› values('A0011', ?, ?, ?, ?, null, '123-123', ?, 'D006')";
			
			//			insert into ์ง์› values (์ง์›id_seq.nextval,'1234','์Šนํ™˜','๋‚จ',20,null,'123-123',3000,'D006');
			//Java์—์„œ ๋ฌธ์ž์—ด๋กœ๋œ ์ฟผ๋ฆฌ๋ฌธ์„ Oracle์˜ ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ๋ฐ”๊ฟ”์คŒ
			pstm = conn.prepareStatement(sql);
			pstm.setString(1, inputPw);
			pstm.setString(2, inputName);
			pstm.setString(3, inputGender);
			pstm.setInt(4, inputAge);
			pstm.setInt(5, inputMoney);
			
//			rs = pstm.executeQuery(); --> select์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์—†์„๋•Œ ์‚ฌ์šฉ
			int result = pstm.executeUpdate(); //--> insert, update, delete์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
			//๋ณ€๊ฒฝ์ด ๋œ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
			if(result > 0) {
				System.out.println("ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต!");
			}
			
//			if(rs.next()) {
//				int age = rs.getInt("๋‚˜์ด");
//				System.out.println("์ž…๋ ฅํ•œ ์ง์›์˜ ๋‚˜์ด >> " + age);
//			}
			
			
//			while(rs.next()) {
//				if(rs.getString("์ด๋ฆ„").equals(inputName) && rs.getString("๋น„๋ฐ€๋ฒˆํ˜ธ").equals(inputPw)) {
//					System.out.println(rs.getString("์ด๋ฆ„") + "๋‹˜์˜ ๋‚˜์ด๋Š” " + rs.getString("๋‚˜์ด") + "์ž…๋‹ˆ๋‹ค.");
//				}
//			}

			//next()๊ฐ€ ์—†์œผ๋ฉด ์ปฌ๋Ÿผ๋ช…์„ ์ถœ๋ ฅ
//			while(rs.next()) {
//				String name = rs.getString(1);
////				String name = rs.getString("์ด๋ฆ„");
//				System.out.println(name);
//				//rs.next() → ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๊ฟ”์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํŒ๋‹จ
//				//          → boolean type
//				//if(rs.next())๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฝ‘์„ ์ˆ˜ ์žˆ์Œ
////				if(rs.getInt("๋‚˜์ด")>=40) {
////					//getString("์ด๋ฆ„") ์ปฌ๋Ÿผ์—์„œ ๋ฌธ์ž์—ด๋ฐ์ดํ„ฐ(์ด๋ฆ„)์„ ๊ฐ€์ ธ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค. 
////					//getString(์ธ๋ฑ์Šค) DB์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” 1๋ถ€ํ„ฐ ์ ์šฉ!
////					String name = rs.getString("์ด๋ฆ„");
////					System.out.println(name);
////				}
////			}
//			
		} catch (SQLException e) {
			System.out.println("์ฟผ๋ฆฌ๋ฌธ ์˜ค๋ฅ˜");
			e.printStackTrace();
		}
		
		//3. DB ์—ฐ๊ฒฐ ์ œ๊ฑฐ -->  ์—ญ์ˆœ์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•จ		
			try {
				if(rs != null) {
				rs.close();
				}
				if(pstm != null) {
					pstm.close();
				}
				if(conn != null) {
					conn.close();
				}
				
			} catch (SQLException e) {
				e.printStackTrace();
			}	
		}
	
}

 

์œ„์˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ๊ฒฝ๋กœ ์˜คํƒ€ ํ™•์ธ ํ›„ ์ž๋ฐ” ํ”„๋กœ์ ํŠธ ๋‚ด์— ๋ ˆํผ๋Ÿฐ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ jdbc.jar๊ฐ€ ์ž˜ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ!

 

โš™๏ธ ์ดํด๋ฆฝ์Šค์—์„œ DB ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ

 

 

์‹คํ–‰ ๋‹จ์ถ•ํ‚ค : alt + x