Web/Java+Spring

JDBC 준비

WakaraNai 2021. 5. 14. 00:16
728x90
반응형

JDBC

java database connectivity

자바로 DB 접속과 SQL문장 실행, 그 결과로 얻은 데이터를 다루는 방법과 절차에 관한 규약

자바 프로그램에서 SQL문을 실행하기 위한 자바 API

각 데이터베이스 벤더에서 제공해주는 드라이버를 사용하면 됨

 

JDBC 드라이버 설치

Maven에 아래 코드를 추가. MySQL은 사이트에서 다운로드 받음.

 

 

 

실습

1. maven - quick-start 프로젝트 생성

group id : kr.or.connect

artifact id : jdbcexam

 

 

2. maven 초기 설정

  • jdk 1.8 을 위해 pom.xml에서 아래 코드의 1.7을 1.8로 수정 후 저장

    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

 

  • JDBC 드라이버 설정
    • mysql은 따로 설치하기. 아래 코드는 pom.xml에 추가 후 저장
    • <dependency>   
        <groupId>mysql</groupId>   
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.46</version>
       </dependency>
  • Update Project

 

 

3. connectdb의 role 테이블 살펴보기

 

 

4. role 테이블 용 클래스 파일 생성

/src/main/java에서  kr.or.connect.jdbcexam 패키지에 클래스 파일 생성

 

이 아래에 새로운 패키지를 생성하여 그 안에 클래스 파일을 생성할 것이기 때문에

package 이름 뒤에 .dto 붙이기

이름은 Role

 

 

 

5. 각 컬럼 당 필드 생성 후 getter, setter 생성하기

 

private Integer roleId;
private String description;

필드를 선언한 뒤

Source -> Generate Getters and Setters -> Select All -> Generate

 

출력 모양을 예쁘게 하기 위해서 toString()도 생성하면 좋음

 

 

마지막으로 두 값을 한 번에 받아오는 생성자 선언해두기

 

public Role(Integer roleId, String description) {
   super();
   this.roleId = roleId;
   this.description = description;
}

 

6. RoleDao 클래스 파일 생성

role 테이블에 정보를 입력/수정/삭제/조회하는 기능을 구현하는 클래스

패키지는 ~.dao

이름은 RoleDao

 

클래스에 가져온 데이터를 저장할 객체 선언. Role 클래스를 이용

import kr.or.connect.jdbcexam.dto.Role;

public class RoleDao {
	
	// 데이터 하나를 가져왔을 때 담아둘 객체가 필요
	public Role getRole(Integer roleId) {
		Role role = null;
		return role;
	}; 
	
}

 

 

7-0. JDBC 클래스의 생성 관계

  1. import java.sql.*
  2. 드라이버를 로드한다
  3. Connection 객체 생성
  4. Statement 객체 생성 및 질의 수행
  5. SQL문의 결과물은 ResultSet객체 생성 후 저장
  6. 모든 객체 닫기

7. 객체 선언 및 예외처리

package kr.or.connect.jdbcexam.dao;

import java.sql.*;
/*
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
*/

import kr.or.connect.jdbcexam.dto.Role;

public class RoleDao {
	private static String dburl =  "jdbc:mysql://localhost:3306/connectdb?serverTimezone=Asia/Seoul&useSSL=false";
	private static String dbUser = "connectuser";
	private static String dbpasswd = "connect123!@#";
	
	// 데이터 하나를 가져왔을 때 담아둘 객체가 필요
	public Role getRole(Integer roleId) {
		Role role = null;
		//드라이버를 로딩해서 커넥션 맺을 객체 선언
		Connection conn = null;
		// 명령을 선언할 statement 객체 선언
		PreparedStatement ps = null;
		// 결과값을 담아낼 객체 선언
		ResultSet rs = null;
		
		// 위의 코드 중 1-2개만 성공할 수도 있으니
		// 예외처리
		try {
			
		} 
		catch (Exception e){
			e.printStackTrace();
		}finally { // 반드시 수행
			// 접속했던 부분, 연결했던 부분 까먹지 않고
			// 꼭 닫아주기
			if (rs != null) {
				// 오류 발생 빈도를 낮추기 위해, 안전한 코드를 생성하기 위해
				// null 값인지 먼저 확인
				try {
					rs.close();
				} catch(SQLException e) {
					e.printStackTrace();
				}
			}
			if (ps != null) { //동일
				try {
					ps.close();
				} catch(SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) { //동일
				try {
					conn.close();
				} catch(SQLException e) {
					e.printStackTrace();
				}
			}
			
		}
		
		
		return role;
	}; 
	
}

 

 

 

8. MySQL에서 데이터 가져오기

위의 try 안을 아래와 같이 수정

private static String dburl =  "jdbc:mysql://localhost:3306/connectdb?serverTimezone=Asia/Seoul&useSSL=false";
private static String dbUser = "connectuser";
private static String dbpasswd = "connect123!@#";
try {
			// 드라이버 로딩
			// MySQL 사용하기 위해 이 클래스를 메모리에 올림
			Class.forName("com.mysql.jdbc.Driver");
            
            
            
            
			// 커넥션 맺기
			// url, user, password
			conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
            
            
            
            
			// 커넥션 객체를 이용하여 statement 객체 생성
			// 쿼리문을 넣어줌
			String sql = "SELECT description,role_id FROM role WHERE role_id = ?";
			ps = conn.prepareStatement(sql);
			// !! sql은 1번째부터 시작
			// sql의 물음표의 위치, 물음표에 넣을 값
			ps.setInt(1, roleId);
			rs = ps.executeQuery(); // 쿼리 실행
            
            /*  참고
            Statement stmt = con.createStatement();
			stmt.execute(“query”);             //any SQL
			stmt.executeQuery(“query”);     //SELECT
			stmt.executeUpdate(“query”);   //INSERT, UPDATE, DELETE
			*/
            
            
            
            
            
			// 그 결과를 결과값용 객체에 넘김
			// 결과가 없을 수도 있기에 if문을 거쳐서 보냄
			if(rs.next()) { // 값이 없다면 False 반환
				// SELECT 문에 적은 컬럼의 순서대로 원하는 컬럼의 위치 입력
				String description = rs.getString(1);
				int id = rs.getInt("role_id"); // 컬럼 이름 입력도 가능
				
				//받아온 값으로 드디어 Role 객체 생성
				role = new Role(id, description);
			}
	} 
		

 

 

 

9. 실행

JDBCExam1.class

main 메소드 추가하기

description에 Developer라고 뜨는지 확인하기

package kr.or.connect.jdbcexam;

import kr.or.connect.jdbcexam.dao.RoleDao;
import kr.or.connect.jdbcexam.dto.Role;

public class JDBCExam1 {

	public static void main(String[] args) {
		RoleDao dao = new RoleDao();
		Role role = dao.getRole(100);
		System.out.println(role);
	}

}

 

728x90
반응형

'Web > Java+Spring' 카테고리의 다른 글

REST API 와 Web API, 상태 코드  (0) 2021.05.14
JDBC - 입력/수정/조회/삭제  (0) 2021.05.14
Maven  (0) 2021.05.13
JSTL (JSP Standard Tag Library)  (0) 2021.05.10
EL (Expression Language) for JSP  (0) 2021.05.10