DAY-28. JDBC 이클립스 연동, 데이터 조작
🔐 2022-04-11
데이터베이스 - JDBC
❗ 수업을 듣고, 개인이 공부한 내용을 적은 것 이기에 오류가 많을 수도 있음
1️⃣ 데이터베이스와 이클립스의 활용
데이터베이스와 이클립스 연동
public class Test {
	public static void main(String[] args) {
		try(Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","kh","kh"))	{
			System.out.println("DB 접속 성공!");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
- “jdbc:oracle:thin:@localhost:1521:xe”,”kh”,”kh” -> @localhost:1521:xe”,”계정아이디”,”계정비번”
- Connection 객체 생성 -> getConnection(url,username,userpw)
이클립스를 통해 데이터베이스의 데이터 추가
public class Insert {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username = "kh";
		String password = "kh";
		// Connection 객체 생성 -> url, username, password -> oracle과 연동시 필요
		try(Connection con = DriverManager.getConnection(url,username,password);
			Statement stmt = con.createStatement();){
			System.out.println("DB접속 성공");
			String sql = "insert into cafe values(seq_cafe.nextval, '아이스아메리카노', 3000, sysdate)";
			// executeUpdate() 메서드의 반환값(정수)
			int rs = stmt.executeUpdate(sql);
			if(rs > 0) { // 0보다 크다는건 insert update delete 중 작업이 실행이 됬다는것
				System.out.println("데이터 추가 성공");
			}
			else {
				System.out.println("데이터 추가 실패");
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
- Statement 객체를 활용한다 → 이때 Connection 연결이 확인된 후 생성
- Statement stmt = con.createStatement(); → 데이터베이스를 조작할 수 있게 연결
executeUpdate()
- stmt.executeUpdate(sql);를 통해 데이터베이스를 수정
- Statement 객체 생성 -> 오라클에서 sql 문을 전송해 쿼리의 결과를 요청할 수 있게 해주는 객체, 접속이 된후 생성
- 행의 데이터에 영향을 줄 경우(insert,update,delete) -> 행에 변화가 생김. -> executeUpdate() 메서드 사용
- executeUpdate 객체는 인자값으로 넘겨준 쿼리문을 통해서 영향을 받은 행의 개수를 반환한다 → 정수(int)로 받는다
❗ 주의
- Connection 사용시 반드시 가장 먼저 프로젝트에 JDBC연동 할 수있는 라이브러리 추가
- sqldeveloper에서 데이터 조작시 commit 반드시 해야한다.
이클립스를 통해 데이터베이스의 데이터 삭제
public class Delete {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username = "kh";
		String password = "kh";
		try(Connection con = DriverManager.getConnection(url,username,password);
			Statement stmt = con.createStatement();){
			// product_id 가 3인 데이터를 삭제
			String sql = "delete from cafe where product_id = 3";
			int rs = stmt.executeUpdate(sql);
			if(rs > 0) {
				System.out.println("데이터 삭제 성공");
			}
			else {
				System.out.println("데이터 삭제 실패");
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
이클립스를 통해 데이터베이스의 데이터 수정
public class Update {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username = "kh";
		String password = "kh";
		try(Connection con = DriverManager.getConnection(url,username,password);
			Statement stmt = con.createStatement()){
			String sql ="update tbl_student set name ='김영수', phone = '010-1234-1234', birth_date = '1985/12/20' where no = 1";
			int rs = stmt.executeUpdate(sql);
			if(rs > 0) {
				System.out.println("데이터 수정 성공");
			}
			else {
				System.out.println("데이터 수정 실패");
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
이클립스를 통해 데이터베이스의 데이터 조회
- 추가,삭제,조회는executeUpdate이지만 조회는 executeQuery을 사용한다
- ResultSet으로 값을 받는다
💡 ResultSet의 커서 개념
System.out.println("rs.next : " + rs.next()); // true출력
System.out.println("rs.next : " + rs.next()); // false 현재 product_id가 1인 데이터 밖에없다
// 커서가 데이터를 가리키고 있는 상태에서 값을 얻어내는 방법
/* product_id(1) -> number -> getInt,
 * product_name(2) -> varchar2
 * price(3) -> number -> getInt
 * register_date(4)) -> date
*/
- ResultSet을 이용하면 테이블의 가장 위쪽에 커서가 존재한다 따라서 첫번째 행을 가르키고 싶다면 rs.next()를 사용해야 한다
- rs.next() 실행 시 아래행에 데이터가 존재하면 true를 데이터가 없으면 false를 반환

- 오라클의 인덱스를 사용하는 방법(컬럼 인덱스를 활용)
public class Select {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username ="kh";
		String password ="kh";
		try(Connection con = DriverManager.getConnection(url,username,password);
			Statement stmt = con.createStatement()){
			// Product_id 가 1번인 메뉴 정보만 가져오기
			String sql = "select * from cafe where product_id = 1";
			ResultSet rs = stmt.executeQuery(sql);
			**// 1. 오라클의 인덱스를 사용하는 방법(컬럼 인덱스를 활용)**
			// 만약 커서를 내렸을때 행이 존재한다면 값을 출력하겠다 -> rs.next()가 true가 도출한다면
			if(rs.next()) {
				System.out.println(rs.getInt(1));  // 1번 컬럼
				System.out.println(rs.getString(2)); // 2번 컬럼
				System.out.println(rs.getInt(3)); // 3번 컬럼
				System.out.println(rs.getDate(4)); // 4번 컬럼
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
if(rs.next()) {
		System.out.println(rs.getInt(1));  // 1번 컬럼
		System.out.println(rs.getString(2)); // 2번 컬럼
		System.out.println(rs.getInt(3)); // 3번 컬럼
		System.out.println(rs.getDate(4)); // 4번 컬럼
}
출력문)

- 컬럼명을 사용하는 방법
public class Select {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username ="kh";
		String password ="kh";
		try(Connection con = DriverManager.getConnection(url,username,password);
			Statement stmt = con.createStatement()){
			// Product_id 가 1번인 메뉴 정보만 가져오기
			String sql = "select * from cafe where product_id = 1";
			// 만약 커서를 내렸을때 행이 존재한다면 값을 출력하겠다 -> rs.next()가 true가 도출한다면
			// 2. 컬럼명을 사용하는 방법
			if(rs.next()) {
				System.out.println(rs.getInt("product_id"));
				System.out.println(rs.getString("product_name"));
				System.out.println(rs.getInt("price"));
				System.out.println(rs.getDate("register_date"));
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
- 테이블의 모든 데이터 출력
public class Select {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username ="kh";
		String password ="kh";
		try(Connection con = DriverManager.getConnection(url,username,password);
			Statement stmt = con.createStatement()){
		String sql = "select * from cafe";
		ResultSet rs = stmt.executeQuery(sql);
		// 데이터가 없을 때 까지 출력 하는법
		// while문을 돌려 rs.next()가 false가 나올 때 까지 -> 데이터가 없을 때
		while(rs.next()) {
			System.out.println(rs.getInt(1));
			System.out.println(rs.getString(2));
			System.out.println(rs.getInt(3));
			System.out.println(rs.getDate(4));
		}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}
- 연습
데이터베이스

자바 코드
package com.kh.student;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Select {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String username = "kh";
		String password = "kh";
		try(Connection con = DriverManager.getConnection(url,username,password);
			Statement stmt = con.createStatement()){
			/*
			// jordy 만 뽑아오기
			String sql = "select * from tbl_student where no = 4";
			ResultSet rs = stmt.executeQuery(sql);
			if(rs.next()) {
				System.out.println(rs.getInt(1));
				System.out.println(rs.getString(2));
				System.out.println(rs.getString(3));
				System.out.println(rs.getDate(4));
			}
			*/
			// 모두 뽑아보기
			String sql = "select * from tbl_student";
			ResultSet rs = stmt.executeQuery(sql);
			while(rs.next()) {
				System.out.println(rs.getInt(1));
				System.out.println(rs.getString(2));
				System.out.println(rs.getString(3));
				System.out.println(rs.getDate(4));
				System.out.println("");
			}
		}
		catch(Exception e) {
			e.printStackTrace();
		}
	}
}
 
      
Leave a comment