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 클래스의 생성 관계
- import java.sql.*
- 드라이버를 로드한다
- Connection 객체 생성
- Statement 객체 생성 및 질의 수행
- SQL문의 결과물은 ResultSet객체 생성 후 저장
- 모든 객체 닫기
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);
}
}
'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 |