본문 바로가기
dev

JDBC 실습(JDBC로 select하기)

by 공뭉 2020. 8. 5.
반응형

지난번 JDBC개념 및 사용방법에 이어
실습을 통해 좀 더 자세히 들어가보자.
JDBC 실습을 위해 임의의 테이블을 생성해주고 데이터를 넣어준다.

데이터가 잘 들어간것을 확인할 수 있다.


이제 실습을 위해 자바프로젝트를 생성한다.
(지난번에 생성해둔 testJDBC프로젝트로 대체하겠다.)
https://0and.tistory.com/89

 

JDBC 개념 및 사용방법

오늘은 JDBC에 대해 알아보겠다. JDBC는 JAVA로 database에 접근할 수 있도록 해주는 일종의 프로그래밍 api다. 원어 : Java DataBase Connectivity -> 약어 JDBC JDBC를 사용하기 위해서는 OJDBC를 설치해야한다...

0and.tistory.com

실습은 간단한 MVC(Model, View, Controller)방식을 적용해 진행하도록 하겠다.
웹프로젝트는 아니니까 V없이 Model과 Controller만 있으면 된다.
Model은 데이터베이스와의 로직을 담당하는 부분이다.
Controller는 클라이언트의 요청을 받아서 로직을 수행하고 응답을 결정하는 역할을 한다.
즉, Model과 View사이에서 데이터를 전달하는 역할을 담당한다.
이번실습에서는 Controller에 main을 두고
Model에 객체 및 DB connection을 두도록 해보겠다.

[src 우측클릭]->[new]->[package]

controller를 생성, 같은 방법으로 model.dao와 model.vo를 생성해주자.
난 미리 생성해둬서 이미 존재한다고 x뜬거니 무시하셔도 된다.

그러면 다음과 같이 구성되어져 있을거다.

이제 vo먼저 작성해보도록 하자.
vo는 Value Object의 약자로 계층간 데이터 교환을 위한 객체를 말한다.

vo에서 TestUser클래스를 생성해주자.

package model.vo;

//vo(value object) = dto(data transfer object)
//계층 간 데이터 교환을 위한 객체 클래스이다.

//vo클래스가 되기 위한 조건
//1. 반드시 캡슐화를 적용할 것 : private
//2. 모든필드에 대한 getter와 setter 작성할 것
//3. 기본 생성자와 매개변수 있는 생성자 작성
//4. 직렬화처리
public class TestUser implements java.io.Serializable{
	private String id;
	private String passwd;
	private String name;
	
	public TestUser(String id, String passwd, String name) {
		super();
		this.id = id;
		this.passwd = passwd;
		this.name = name;
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPasswd() {
		return passwd;
	}

	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

	public String getName() {
		return name;
	}

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

	@Override
	public String toString() {
		return "TestUser [id=" + id + ", passwd=" + passwd + ", name=" + name + "]";
	}
	
}


이번엔 dao를 작성해주자.
dao는 Data Access Object의 약자로,
데이터베이스에 접근해 요청받은 결과를 반환해주는 클래스다.

dao에서 JDBCModel을 생성한다.

package model.dao;

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

import model.vo.TestUser;

//DAO : Data(base) Access Object
//DB에 접속해 CRUD를 수행하는 메소드들이 담겨있는 클래스를 의미.
//C(Create) : insert
//R(Read) : select
//U(Update) : update
//D(Delete) : delete
public class JDBCModel {

	//TEST_USER 테이블의 모든 정보를 조회할 메소드(select *)
	public void testJDBC() {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;

		try {
			//1. 해당 데이터베이스에 대한 라이브러리 등록 작업
			Class.forName("oracle.jdbc.driver.OracleDriver");

			//2. 데이터베이스와 연결 (Connection 객체 생성)
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", 
					"student", 
					"student");

			System.out.println("conn : " + conn);

			//3. DB에서 쿼리문을 실행하고 실행 결과를 ResultSet으로 받음
			//3-1. 쿼리문 선언 및 생성.
			String query = "SELECT * FROM TEST_USER";
			stmt = conn.createStatement();
			//3-2. 쿼리문 실행 및 결과 저장.
			rset = stmt.executeQuery(query);
			//3-3. 결과값 출력
			while(rset.next()) {
				System.out.println(rset.getString("ID") + ", "
						+ rset.getString("PASSWD") + ", "
						+ rset.getString("NAME"));
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				//4. 객체 사용 후 반환
				rset.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}

		}

	}
}

나는 sqldeveloper에서 db에 접근하는 uid와 upwd를 student로 생성하여
getConnection() 할때 student로 작성하였는데 이부분은 각자 db접근시
사용하는 id와 pwd를 적어주면된다.

이제 controller를 작성해주자.


controller에서 TestMain클래스를 생성한다.

package controller;

import model.dao.JDBCModel;
import model.vo.TestUser;

public class TestMain {

	public static void main(String[] args) {
		JDBCModel test = new JDBCModel();
		
		//TEST_USER테이블 모든 행 조회
		test.testJDBC();

	}

}	

Dao에 정의되어있는 JDBCModel클래스를 통해
test라는 이름의 JDBCModel 객체를 생성하였고,
JDBCModel클래스에 정의되어있는 testJDBC() 메소드를 통해
DB에 접속하여 SELECT * FROM TEST_USER 쿼리를 수행한 후
반환된 값을 반복문을 통해 출력하는 프로젝트이다.

정상적으로 조회되는지 확인해보자.

다음과 같이 정상적으로 조회가 됨을 확인할 수 있다.
sqldeveloper에 데이터를 추가하고 다시 조회해보자.

정상적으로 추가되고 조회됨을 확인할 수 있다.

developer에서 말고도
JDBC를 통해 insert, update 등 다양한 조작도 가능하다.
이번엔 select만을 실습해보았고
다음시간엔 JDBC를 통해 다양한 조작을 실습해보도록 하겠다.


반응형

댓글