JDBC

류정훈·2023년 1월 30일
0

학습내용

목록 보기
14/15

JAVA에서 DB에 접근할 수 있게 해주는 Java Programming API

작성문

// 1단계 : JDBC 객체 참조 변수 선언(java.sql 패키지의 인터페이스)
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 연결 정보를 담은 Connection을 생성 try catch문 사용
try {
String type = "jdbc:oracle:thin:@"; // JDBC 드라이버 종류		
String ip = "localhost"; // DB 서버 컴퓨터 IP // localhost == 127.0.0.1(loop back ip)
String port = ":1521"; // 1521(기본값)
String sid = ":XE"; // DB 이름
String user = "kh";
String pw = "kh1234";
conn = DriverManager.getConnection(type + ip + port + sid, user, pw);
// 3. SQL 작성
// ** 자바에서 작성되는 SQL은 마지막에 ;(세미콜론) 안찍음 ** 
String sql = "SELECT EMP_ID, EMP_NAME, SALARY, HIRE_DATE FROM EMPLOYEE";
// 4. Statement 객체 생성
// -> Connection 객체를 통해서 생성
stmt = conn.createStatement();
// 5. 생성된 Statement 객체에
// sql을 적재하여 실행한 후
// 결과를 반환 받아와서 
// rs변수에 저장
rs = stmt.executeQuery(sql);
// executeQuery() : SELECT문 수행 메서드 , ResultSet반환
while(rs.next()) {
 // rs.next() : rs가 참조하는 ResultSet 객체의
 //				첫번째 컬럼부터 순서대로 한 행씩 이동하며
 //다음 행이 있을경우 true / 없으면 false 반환
 // rs.get자료형("컬럼명")
String empId = rs.getString("EMP_ID");
// 현재 행의 "EMP_ID" 문자열 컬럼의 값을 얻어옴
String empName = rs.getString("EMP_NAME");
// 현재 행의 "EMP_NAME" 문자열 컬럼의 값을 얻어옴
int salary = rs.getInt("SALARY");
// 현재 행의 "SALARY" 숫자(정수) 컬럼의 값을 얻어옴
Date hireDate = rs.getDate("HIRE_DATE");
// -> java.sql.date
// -> java.util.date도 가능하긴 함
// 조회 결과 출력
System.out.printf("사번 : %s / 이름 : %s / 급여 : %d / 입사일 : %s\n",
empId, empName, salary, hireDate.toString());
// java.sql.Date의 toString()은 yyyy-mm-dd 형식으로 오버라이딩 되어있음
}
	}catch(ClassNotFoundException e) {
			System.out.println("JDBC 드라이버 경로가 잘못 작성됨");		
		}catch(SQLException e) {
		// SQLException : DB 관련 최상위 예외(== 데이터베이스에 관련된 모든 예외)
		e.printStackTrace();
		}finally {
			// 4단계 : 사용한 JDBC 객체 자원 반환( close() )
			// resultset, statement, connection 닫기(생성 역순으로 닫는 것을 권장)
			try {
			if(rs != null)rs.close();
			if(stmt != null)stmt.close();
			if(conn != null) conn.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}	
	}
}
profile
It works...why?

0개의 댓글