본문 바로가기
국비지원/DataBase

[DB] 16. JDBC (Java Database Connectivity) / eclipse와 DB연결하기

by cosmog 2022. 11. 22.
반응형

https://recollectionis.tistory.com/162

 

[Java] 이클립스(Eclipse) JDBC (ORACLE) 개발 환경 설정

이번 포스팅은 이클립스와 오라클의 JDBC 연동을 하는 방법입니다.1. 프로젝트에서 [New - Folder] 또는 [Ctrl + N] 으로 폴더를 하나 생성합니다. 생성할 폴더명은 lib로 입력 하고 [Finish] 버튼을 클릭합

recollectionis.tistory.com

위 블로그를 참고해서 eclipse 프로젝트에 jar파일을 적용해주었다.

 

insert
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCInsert {
	
	public static void main(String[] args) {
		
		//insert
		String url = "jdbc:oracle:thin:@localhost:1521:xe"; //주소
		String uid = "hr"; //아이디 계정
		String upw = "hr"; // 비밀번호
		
		String sql = "insert into auth values(seq_auth.nextval, ?, ?)";
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//connection
			conn = DriverManager.getConnection(url, uid, upw);
		
			//statement객체
			pstmt = conn.prepareStatement(sql);
			
			//3. ?값 세팅 - 첫번째부터 1번 순서 (setString, setInt, setDate, setTimestmp)
			pstmt.setString(1, "홍길동");
			pstmt.setString(2, "프로그래머");
			
			//4. sql 실행 (select문은 executequery문장으로 실행, insert, delete, update문은 executeupdate 메서드로 실행)
			int result = pstmt.executeUpdate(); // 성공, 실패 결과를 반환한다.
			
			if(result == 1) {
				System.out.println("성공");
			}else {
				System.out.println("실패");
			}
			
			
		}catch (Exception e) {
			//에러 로그 확인
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				System.out.println("close에러");
			}
		}
		
		
	}

}

 

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

public class JDBCUpdate {

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);
		
		/*스캐너로 값을 입력받기*/
		System.out.print("업데이트 하고 싶은 auth_id > ");
		int update_id = Integer.parseInt(scan.next());
		
		System.out.print("변경 할 이름 > ");
		String update_name = scan.next();
		
		System.out.print("변경 할 직업 > ");
		String update_job = scan.next();
		
		//스캐너로 auth_id, name, job을 입력받아서 해당 auth_id의 name, job을 업데이트하는 구문
		String url = "jdbc:oracle:thin:@localhost:1521:xe"; //주소
		String uid = "hr"; //아이디 계정
		String upw = "hr"; // 비밀번호

		String sql = "update auth set name = ?, job = ? where auth_id = ?";

		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//connection
			conn = DriverManager.getConnection(url, uid, upw);
		
			//statement객체
			pstmt = conn.prepareStatement(sql);
			
			/*?값 셋팅*/
			pstmt.setString(1, update_name);
			pstmt.setString(2, update_job);
			pstmt.setInt(3, update_id);
			
			int result = pstmt.executeUpdate(); // 성공, 실패 결과를 반환한다.
			
			if(result == 1) {
				System.out.println("성공");
			}else {
				System.out.println("실패");
			}
			
			
		}catch (Exception e) {
			//에러 로그 확인
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
				scan.close();
			} catch (SQLException e) {
				System.out.println("close에러");
			}
		}
	}

}

 

select
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCselect {

	public static void main(String[] args) {

		//select
		String url = "jdbc:oracle:thin:@localhost:1521:xe"; //주소
		String uid = "hr"; //아이디 계정
		String upw = "hr"; // 비밀번호
		
		String sql = "select * from auth";

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null; // select 결과를 반환받을 객체
		
		try{
			//드라이버 로드
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//conn
			conn = DriverManager.getConnection(url, uid, upw);
			
			//pstmt
			pstmt = conn.prepareStatement(sql);
			
			//?값이 없기때문에 그냥 바로 sql 실행
			rs = pstmt.executeQuery();
			
			while(rs.next()) { //다음 row가 있다면 true
				
				//한 행에 대한 처리를 해줌.
				//getInt, getString, getDouble, getTimestamp, getDate
				int auth_id = rs.getInt("auth_id");
				String name = rs.getString("name");
				String job = rs.getString("job");
				
				System.out.println("번호:"+auth_id+", 이름:"+name+", 직업:"+job);
				
			}
			
			
			
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}

}

 

method로 빼서 활용

🔸 Main클래스

package jdbc.model;

import java.util.ArrayList;
import java.util.Scanner;

public class MainClass {
	

	//상수
	public static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
	public static final String UID = "hr";
	public static final String UPW = "hr";
	
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		AuthDAO authDAO = new AuthDAO();
		
		while(true) {
			
			try {
				System.out.println("₊̣̇.ෆ˟̑*̑˚̑*̑˟̑ෆ.₊̣̇.ෆ˟̑*̑˚̑*̑˟̑ෆ.₊̣̇.ෆ");
				System.out.println("메뉴선택 [1. 저장 2. 조회]");
				System.out.println("₊̣̇.ෆ˟̑*̑˚̑*̑˟̑ෆ.₊̣̇.ෆ˟̑*̑˚̑*̑˟̑ෆ.₊̣̇.ෆ");
				
				System.out.print(">");
				String menu = scan.next();
				
				switch(menu) {
				case "1":
					
					System.out.print("이름> ");
					String name = scan.next();
					System.out.print("직업> ");
					String job = scan.next();
					
					int result = authDAO.insertEx(name, job);
					
					if(result == 1) {
						System.out.println("정상 입력되었습니다.");
					}else {
						System.out.println("입력 오류 발생.");
					}
					
					break;
				case "2":
					ArrayList<AuthVO> list = authDAO.selectEx();
					
					for(AuthVO vo : list) {
						System.out.println(vo.toString());
					}
					
					break;
					
				default:
					System.out.println("선택불가능한 번호 입니다.");
					break;
				}
				
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}

}

🔸 AuthDAO에 조회, 저장 method가 있다. DB랑 연결

package jdbc.model;

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

public class AuthDAO {

	//멤버변수
	private String url = MainClass.URL;
	private String uid = MainClass.UID;
	private String upw = MainClass.UPW;

	//메서드화
	public int insertEx(String name, String job) {
		int result = 0;

		String sql = "insert into auth values(seq_auth.nextval, ?, ?)";
		Connection conn = null;
		PreparedStatement pstmt = null;

		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, uid, upw);
			pstmt = conn.prepareStatement(sql);

			pstmt.setString(1, name);
			pstmt.setString(2, job);

			result = pstmt.executeUpdate(); // 성공, 실패 결과를 반환한다.

			return result;

		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				System.out.println("close에러");
			}
		}

		return result;
	}

	//조회 메서드
	public ArrayList<AuthVO> selectEx(){
		ArrayList<AuthVO> list = new ArrayList<>();
		
		String sql = "select * from auth";

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null; // select 결과를 반환받을 객체
		
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, uid, upw);
			pstmt = conn.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				int auth_id = rs.getInt("auth_id");
				String name = rs.getString("name");
				String job = rs.getString("job");
				
				AuthVO vo = new AuthVO(auth_id, name, job);
				list.add(vo);
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return list;
	}


}

🔸 AuthVO

package jdbc.model;

public class AuthVO {

	//특별한 알고리즘을 가진 클래스가 아니라, 조회한 테이블을 저장할 클래스
	//1.변수는 은닉하고, 테이블이 가지고 있는 멤버변수를 그대로 사용한다.
	//2. getter, setter를 사용
	
	private int auth_id;
	private String name;
	private String job;
	
	//생성자 - 기본 생성자, 모든 멤버변수를 저장하는 생성자
	public AuthVO() {}

	public AuthVO(int auth_id, String name, String job) {
		super();
		this.auth_id = auth_id;
		this.name = name;
		this.job = job;
	}

	//getter, setter
	public int getAuth_id() {
		return auth_id;
	}

	public void setAuth_id(int auth_id) {
		this.auth_id = auth_id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	//toString overriding
	@Override
	public String toString() {
		return "AuthVO [auth_id=" + auth_id + ", name=" + name + ", job=" + job + "]";
	}
	
	
	
}
반응형

'국비지원 > DataBase' 카테고리의 다른 글

[DB] 18. 프로시저(PROCEDURE) & 트리거(TRIGGER)  (0) 2022.11.25
[DB] 17. PLSQL  (0) 2022.11.25
[DB] 14. 데이터베이스 모델링  (0) 2022.11.18
[DB] 13. 권한 (Privilege) 사용자 생성  (0) 2022.11.17
[DB] 12. SEQUENCE & INDEX  (0) 2022.11.16