티스토리 뷰

저번시간 JDBC 실습을 위한 환경설정을 진행했었습니다.

 

말씀드린바와 같이 DBMS 는 Oracle, 데이터는 Oracle 기본계정인 Scott/Tiger 계정에 EMP 테이블을 사용합니다.

 

실습은 간단하게 jdbc를 이용해 Oracle과 JAVA를 연결하고, 위 테이블을 console창을 통해 출력하는 형태로만 진행하도록 하겠습니다.

 

후에 db연결의 번거로움을 덜기 위해 JDBCTemplate를 만들고 Select, Insert, Update, Delete 작업을 진행해 보도록 하겠습니다.

 

일단 지금 진행할 실습은 DataBase의 SELECT 기능을 이용한 SelectList / SelectOne 입니다.

 

말 그대로 테이블에 존재하는 모든 rows들을 출력 / 테이블에 존재하는 rows들 중 하나를 선택해 출력 하는 실습 입니다.

 

JDBC 프로그램의 작성 단계

JAVA와 DB를 연결하기 위한 코드의 작성순서는 위 그림과 같습니다. 

 

설명보다는 실습을 통해 직접 알아보도록 하겠습니다.

SelectList

package com.test_emp;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class EMP_SelectList {

	// J DB C
	// 1. Driver 연결
	// 2. 계정 연결
	// 3. Query 준비
	// 4. 실행 및 리턴
	// 5. DB 종료

	// ojdbc6.jar 는 자바와 오라클의 연동을 도와주는 라이브러리

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		// 1. Driver 연결
		// ojdbc6.jar 라이브러리 추가 - oracle.jdbc.driver 패키지 - OracleDriver 클래스
		Class.forName("oracle.jdbc.driver.OracleDriver");

		// 2. 계정 연결
		// Data Source Explorer - Database Connections - My Oracle - properties - Driver
		// Properties - Connection URL
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "Scott";
		String password = "Tiger";

		Connection con = DriverManager.getConnection(url, user, password);

		// 3. Query 준비
		Statement stmt = con.createStatement();
		String sql = " SELECT * FROM EMP "; // 복잡한 쿼리를 위해 앞 뒤를 띄어주자~!

		// 4. 실행 및 리턴
		ResultSet rs = stmt.executeQuery(sql);
		while (rs.next()) {
			System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getInt(4) + " "
					+ rs.getDate(5) + " " + rs.getInt(6) + " " + rs.getInt(7) + " " + rs.getInt(8));
		}

		// 5. DB 종료
		rs.close();
		stmt.close();
		con.close();
	}
}

 

1. Driver 연결

2. 계정 연결

 

두 과정은 JAVA와 Oracle DataBase 의 연동을 위한 기본 설정 코드 입니다.

 

2번 과정에 user와 password는 기본 Scott/Tiger 계정을 사용했고 실습하시는 분 마다 따로 생성한 계정이 있다면 그 계정의 user와 password를 사용하시면 됩니다.

 

선언한 String변수 url / user / password 는 DriverManager객체를 이용한 getConnection() 연결 메서드에 파라미터로 사용됩니다.

 

3. query 준비

4. 실행 및 리턴

 

3,4번 과정에서 주의깊게 살펴보셔야 할 부분은 Statement 객체와 ResultSet 객체 입니다.

 

Statement 객체의 executeQuery(sql) 메서드를 통해 미리 준비된 query문을 실행합니다.

 

이를 통해 리턴된 EMP table의 row들을 ResultSet 객체에 담아놓습니다.

 

이 코드에서는 System.out.println() 을 통해 바로 console에 출력했지만 후에는 VO(DTO) 객체를 통해 웹페이지에 뿌리는 작업을 진행할 수 있습니다.

 

5. DB종료

 

DB연결을 위해 생성한 객체들 (Connection / Statement / ResultSet) 들을 닫아주면 코드작성이 완료됩니다. 

 

이 때 중요한점은 코드상에 객체를생성한 순서의 역순으로 닫아줘야 한다는 점 입니다.

 

위 코드에 대한 결과물은 다음과 같습니다.

 

SelectOne

package com.test_emp;

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

public class EMP_SelectOne {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {

		// 1. Driver 연결
		Class.forName("oracle.jdbc.driver.OracleDriver");

		// 2. 계정 연결
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "kh";
		String password = "kh";
		Connection con = DriverManager.getConnection(url, user, password);

		// 3. Query 준비
		Scanner sc = new Scanner(System.in);
		System.out.println("EMPNO 입력 : ");
		int empno = sc.nextInt();

		PreparedStatement pstmt = null;
        	//String sql = " SELECT * FROM EMP WHERE EMPNO = " + empno;
		String sql = " SELECT * " 
					+ " FROM EMP " 
					+ " WHERE EMPNO = ? ";

		pstmt = con.prepareStatement(sql);
		pstmt.setInt(1, empno);

		// 4. 실행 및 리턴
		ResultSet rs = pstmt.executeQuery();
		while (rs.next()) {
			System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getInt(4) + " "
					+ rs.getDate(5) + " " + rs.getInt(6) + " " + rs.getInt(7) + " " + rs.getInt(8));
		}

		// 5. DB 종료
		rs.close();
		pstmt.close();
		con.close();

		sc.close();
	}
}

 

두번째 실습은 selectOne 즉 테이블에 존재하는 rows중 하나의 row를 가져와 출력하는 내용입니다.

 

위의 selectList와 내용상 큰 차이는 없으나 주목해야할 점은 sql상에 하나의 row를 선택하기 위한 where조건을 주었다는 점, 그리고 이 조건에 값을 대입하기 위해 PreparedStatement를 사용했다는 점 입니다.

 

PreparedStatement 는 말 그대로 쿼리를 미리 준비한다는 의미입니다. 

 

첫번째 실습과 다르게 3. query 준비 과정에서

 

pstmt = con,prepareStatement(sql);

pstmt.setInt(1, empno);

 

라는 구문이 추가된 것을 보실 수 있습니다. 

 

이는 String sql = "" 에 입력한 ? 를 우리가 원하는 변수로 채워주는 작업입니다.

 

이를 통해 String sql 위에 주석처리한 것 처럼 String과 변수를 더해서 반복하는 번거로운 작업을 쉽게 해결할 수 있습니다.

 

보통 하나의 row를 선택하기 위한 조건으로는 테이블의 Primary Key 에 해당하는 Column을 선택합니다.

 

위 코드에서도 sql문의 where 조건으로 EMP 테이블의 Primary Key인 EMPNO 조건을 준 것을 볼 수 있습니다.

 

이제 위 코드를 통해 console창에 출력된 결과물을 보겠습니다.

 

 

 

이렇게 두가지 실습을 통해 DB에 존재하는 데이터를 콘솔창에 출력하는 과정을 익혀보았습니다.

 

아직은 콘솔에 출력하는 간단한 실습이지만 후에 jspServlet, Spring Framwork 등을 통해 WebService를 구현하는 작업에 기초가 되는 단계인 만큼 유용한 포스팅이 되길 바라는 마음입니다.

 

다음 실습에는 DB와 연결하는 코드를 간략화 하기 위해 JDBCTemplate를 만들어보고 이를 통해

 

select insert update delete 네가지 주요 sql을 다뤄보는 실습을 진행하도록 하겠습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함