본문 바로가기
Study/중앙정보처리학원과정

24일차(1). 이클립스(Eclipse)에서 DDL, DML 수행하기

by 얏옹이 2022. 11. 25.
반응형

이전글

 

2022.11.25 - [Study/중앙정보처리학원과정] - 23일차. 이클립스(eclipse)와 오라클 데이터베이스(Oracle database)11gR2 연동

 

23일차. 이클립스(eclipse)와 오라클 데이터베이스(Oracle database)11gR2 연동

수업 개발환경과 동일하게 맞추는 설정입니다. Java 8 버전에 Oracle database 버전은 11gR2 버전입니다. 2022.11.16 - [Study/중앙정보처리학원과정] - 17일차. Oracle Database(오라클 데이터베이스)11gR2 설치 그

yat-ong.tistory.com

 

이전글과 이어지는 오늘은 DB 연동 이틀째.

그리고 오늘은 티스토리에 코드라인을 넣을수있다는 신기능(?) 을 발견했다.

여태 캡쳐하고 올리고 캡쳐하고 올리고 해서 번거롭게 포스팅 하고 보는사람도 눈이 아플지경이였을텐데 오늘부터는 코드라인으로 좀더 깔끔한 포스팅이 가능할거같다.

 

어제는 DB 연동을 하고 Insert를 이클립스에서 수행하면서, PreparedStatement 객체를 생성해서 사용하는걸 해봤다.

그리고 executeUpdate를 사용하여 각각 값을 지정해서 Insert를 해주었는데, 이는 Delete와 Update에서도 동일하다

 

따라서 Delete와 Update를 이야기하기 보다 executeQuery를 이용하는 Select 문을 오늘 포스팅하려 한다.

 

 

 

 

//접속과 수행에 필요한 변수 선언
		String url = "jdbc:oracle:thin:@localhost:1521/xe";
		String id = "scott";
		String pw = "tiger";
		String sql = "select empno, ename, hiredate, sal, job" + 
				" from emp" + 
				" where empno = ?";
		Connection conn = null;
		PreparedStatement pstm = null;
		ResultSet rs = null; //Select 쿼리 결과문의 집합
		
		
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			System.out.println("OracleDriver 클래스 생성 완료");
		} catch (ClassNotFoundException e) {
			System.out.println("OracleDriver 클래스 생성 실패");
			e.printStackTrace();
		}
		
		try {
			conn = DriverManager.getConnection(url, id, pw);
			System.out.println("접속 성공");
		} catch (SQLException e1) {
			System.out.println("오류가 있어서 접속 실패");
			e1.printStackTrace();
		} 
		
		
		//preparedStatement 객체 생성
		try {
			pstm = conn.prepareStatement(sql);
			System.out.println("객체 생성 완료");
		} catch (SQLException e2) {
			System.out.println("객체 생성 실패");
			e2.printStackTrace();
		}

 

위의 코드는 DB 연동하는 전체적인 코드 리스트이다. 이 반복되는 문구들도 Method화 해서 처리해줄수 있다는걸 오늘 배웠다.

 

아직은 학습중이기때문에 각 Try-Catch 문구에 성공&에러 여부를 알려주기 위해 Print메소드를 이용하여 출력되게 작성했다.

 

		try {
			pstm.setInt(1, 7934);
			
			//executeQuery는 리턴값이 ResultSet 타입이다. 따라서 ResultSet 타입 참조변수로 리턴값을 받는다.
			rs = pstm.executeQuery();
			
			
			while(rs.next()) {
				//while문으로 
				//인덱스 번호로 받아오기
				int eno = rs.getInt(1);
				//컬럼명으로 받아오기
				String ename = rs.getString("ename");
				Date date = rs.getDate("hiredate");
				SimpleDateFormat dateFormat = new SimpleDateFormat("YY-MM-DD");
				String hiredate = dateFormat.format(date);
				int sal = rs.getInt("sal");
				String job = rs.getString("job");
				
				System.out.println(eno+","+ename+","+hiredate+","+sal+","+job);
			}
			
			
		} catch (Exception e3) {
			e3.printStackTrace();
			System.out.println("select 실패");
		}

 

executeQuery는 리턴값을 ResultSet 타입으로 리턴해준다. 따라서 ResultSet 타입의 rs 변수를 지정해준후

호출하며 값들을 전부 rs 변수에 가져온다.

 

그리고 반복문(while)문을통하여 rs에 있는값들을 각 컬럼의 타입에 맞는 변수를 생성하여 꺼내주고

꺼내온 그 변수들을 출력해주었다. 꺼내는 방법은 두가지가 있는데

Eno 변수처럼 인덱스번호를 직접 입력해주는 방법도 있지만, 값이 고정되는게 좋지 않다.

따라서 직접 "컬럼명"을 입력해서 그 해당하는 컬럼명의 값을 출력해주도록 했다. 인덱스 번호가 바뀌더라도

각 컬럼명으로 대입이 되어있기때문에 유연하게 대처할수 있다.

 

이렇게 Select 문을 날려준후 사용한 자원들은 닫아주는게 좋다.

		try {
			if(rs != null) {
				rs.close();
			}
			
			if(pstm != null) {
				pstm.close();
			}
			
			if(conn != null) {
				conn.close();
			}
			System.out.println("모든 객체 close완료");
		} catch (Exception e) {
			System.out.println("객체 닫기 실패");
		}

 

 

 

 

실행 결과는 이렇게 표기되고 

 

SetInt에 대입해준 empno가 7934인 Miller가 정상적으로출력된다.

 

 

반응형