무룩 공부방

[Java03] DB연동 연습 (1) (Eclipse, SQL Developer) 본문

IT/Java03_JDBC

[Java03] DB연동 연습 (1) (Eclipse, SQL Developer)

moo_look 2023. 10. 15. 18:03

 그동안 새로운 개념을 학습할 때 마다 진행 되었던 성적처리 프로그램을 저번시간에 학습했던 싱글톤으로 생성된 객체로 DB에 접근하여 테이블을 생성해본다. 

 

# JDBC (Java Database Connectvity)

자바 언어로 다양한 종류의 관계형 데이터베이스의 접속하고
SQL문을 수행하여 처리하고자 할때 사용되는 표준 SQL 인터페이스 API이다.

 

# JDBC 연동

1. 오라클 설치
2. table 만들기 + CRUD
3. DB접속
  1) 드라이버로딩
  2) 접속

DAO (데이터베이스와 연동하는 오브젝트) - CRUD처리하는 Class(method)를 DAO에저장
VO, DTO class를 만듬 (저장 데이터를 vo로 불러와서 저장 / 입력값을 vo에 저장하고 table로 보냄)

데이터를 주고 받을 때에는 객체로 보내고 받아야하기 때문

 


<field / VO>

package java03_jdbc.dao;

public class ScoreVo {

	private int numid;
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	public int getNumid() {
		return numid;
	}
	public void setNumid(int numid) {
		this.numid = numid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	
	
}

<main>

package java03_jdbc;

import java.util.Scanner;

import java03_jdbc.dao.ScoreDao;

public class ScoreProject {

	public static void main(String[] args) {

		int menu;
		
		Scanner sc = new Scanner(System.in);
		
		ScoreDao dao = new ScoreDao();
		boolean flag = true;
		
		while(flag) {
			
			System.out.print("[1]입력 [2]검색 [3]수정 [4]삭제 [5]종료 : ");
			menu = sc.nextInt();
			
			switch(menu) {
			case 1 :
				dao.view();
				break;
			case 5 :
				System.out.println("종료");
				flag = false;
				break;
				
			}
		}//while
		
		sc.close();

	}//main

}//class

<DAO>

package java03_jdbc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Scanner;

import java03_jdbc.db.Db;

public class ScoreDao {
	
	Scanner sc = new Scanner(System.in);

	public void view() {
		System.out.print("번호 이름 국어 영어 수학 : ");
		int numid = sc.nextInt();
		String name = sc.next();
		int kor = sc.nextInt();
		int eng = sc.nextInt();
		int mat = sc.nextInt();
	
		ScoreVo vo = new ScoreVo();
		
		vo.setNumid(numid);
		vo.setName(name);
		vo.setKor(kor);
		vo.setEng(eng);
		vo.setMat(mat);
		
		ScoreInsert(vo);
	}
	
	public void ScoreInsert(ScoreVo vo) {
		
		Db db = Db.getDb();
		Connection conn = db.getConnection(); /////////DB접속
		
		PreparedStatement pstmt = null; //statement 방식보다 빠름 / 대입해주는 객체
       		 // query문을 실행하기 위한 객체
		
		String sql = "insert into score (numid,name,kor,eng,mat) values "
				+ " (score_seq.nextval, ?, ?, ?, ?)"; 
		
		try {
			pstmt = conn.prepareStatement(sql); // sql을 실행하기 위한 준비
			
			pstmt.setInt(1, vo.getNumid()); // 인덱스가 1부터 시작됨에 주의
			pstmt.setString(1, vo.getName());
			pstmt.setInt(2, vo.getKor());
			pstmt.setInt(3, vo.getEng());
			pstmt.setInt(4, vo.getMat());		
			
			pstmt.executeUpdate(); // sql실행
			
		} catch (Exception e) {
			
		} finally {
			
		}
		
	}

}


 위와 같이 DB와 연동하여 데이터 입력이 잘 이루어진 모습을 볼 수 있는데 입력 데이터 홍길순의 번호가 21인 이유는 학습중 NUMID를 Primary Key로 지정한뒤, 시퀀스(Sequence)를 이용하여 NUMID에 추가 하였는데 테스트 실행 횟수만큼 증가하였다. 이 부분은 추후에 시퀀스에 대해 학습할 때 다시 살펴볼 예정이다.

<Sequence>