JDBC

H5-3. 0723_ JDBC 10번 과제코드

55yudi 2021. 10. 31. 15:56
package myjdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class JDBCExam { //과제10 (정답코드)

	public static void main(String[] args) throws Exception {
		Scanner scan = new Scanner(System.in);
		System.out.println("조회할 이름을 입력하세요.");
		String name = scan.nextLine();
		System.out.println(name);
		//사용자가 아무것도 입력하지 않고 엔터치면 프로그램이 종료되게 하기
		//while문 등으로 반복하기
		EmpDAO1 empDAO = new EmpDAO1();
		while(name != null && name.length() != 0) {
			empDAO.printEmployee(name); //오류: 호출안되는 이유 : Class가 달라서 안불러와진다.
									//--> 객체를 생성해서 호출하면 된다.(16줄 적고 18줄 앞에 변수. 붙이기)
			System.out.println("조회할 이름을 입력하세요.");
			name = scan.nextLine();
		}
		System.out.println("프로그램을 종료합니다.");
	}

}

class EmpDAO1 {
	public void printEmployee(String name) throws Exception {
		//이 부분을 작성하시오.
		//전달받은 이름을 활용하여 데이터베이스에서 데이터를 가져와 화면에 출력합니다.
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "hr");
		String sql = "select * from employees where first_name = '" + name + "'"; //
		Statement stmt = con.createStatement();
		ResultSet rs = stmt.executeQuery(sql);
		if(rs.next()) { //if문으로 하고 가져올 정보의 열(컬럼) 번호를 가져오거나 이름을 직접 가져와도 된다.
			//String lastName = rs.getString("last_name"); 이렇게도 가능!
			String lastName = rs.getString(3);
			String firstName = rs.getString(2);
			int empId = rs.getInt(1);
			System.out.printf("empId: %d, first_name: %s, last_name: %s", empId, firstName, lastName);
		}
//		rs.close();
		con.close(); //커넥션 자체를 종료하는게 더 좋기도 하다.
	}
}