📍 RoleDao.java는 MySQL과 Role.java 클래스를 이용하여 데이터를 처리하는 클래스 이다.
Class.forName
메서드를 이용하여 JDBC 드라이버 로딩Class.forName("com.mysql.jdbc.Driver");
📍 Oracle DB 사용시 "oracle.jdbc.driver.OracleDriver"
private static String dburl = "jdbc:mysql://localhost:3306/connectdb1?serverTimezone=Asia/Seoul&useSSL=false";
private static String dbUser = "connectuser";
private static String dbpasswd = "비밀번호";
📍 Oracle DB 사용시
url 부분 : "jdbc:oracle:thin:@localhost:1521:xe"
@ip:포트번호:xe
👉 Oracle의 기본 포트번호는 1521 이다.
//드라이버 로딩
Class.forName("com.mysql.jdbc.Driver");
//커넥션 객체
conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
PreparedStatement ps = null; //객체 생성
String sql = "SELECT description,role_id FROM role WHERE role_id = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, roleId);
rs = ps.executeQuery(); //명렁어 실행
?
로 표시하여 사용?
파라미터 값에 setInt를 이용하여 roleId 매핑if(rs.next()) {
String description = rs.getString(1);
int id = rs.getInt("role_id");
role = new Role(id, description);
}
rs.next() : 데이터 존재 여부 확인
결과값이 있다면 첫번째 레코드에 가서 true 리턴
결과값이 있다면 false 리턴
컬럼의 데이터 타입에 맞춰 컬럼 순서 or 컬럼명 입력
executeQuery
select 명령문에서 사용
반환값 : ResultSet 클래스의 인스턴스로 반환
executeUpdate
insert, update, delete 명령문에서 사용
반환값 : int
rs.close();
ps.close();
conn.close();
📕 전체 코드
RoleDao.java
package kr.or.connect.jdbcexam.dao;
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/connectdb1?serverTimezone=Asia/Seoul&useSSL=false";
private static String dbUser = "connectuser";
private static String dbpasswd = "";
public Role getRole(Integer roleId) {
Role role = null;
Connection conn =null; //연결을 맺어낼 객체
PreparedStatement ps = null; //명령을 선언할 객체
ResultSet rs = null; //결과값을 담아낼 객체
try {
//드라이버 로딩
Class.forName("com.mysql.jdbc.Driver");
//커넥션 객체
conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
String sql = "SELECT description,role_id FROM role WHERE role_id = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, roleId);
rs = ps.executeQuery(); //명렁어 실행
if(rs.next()) {
String description = rs.getString(1);
int id = rs.getInt("role_id");
role = new Role(id, description);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(rs != 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();
}
}
}//연결한 부분 닫아주기 finally는 반드시 수행되다.
//ex) ps에서 수행하다 예외 발생시
//rs는 null인 상태일 때 rs. 수행되면
//nullpointerexception이 수행되기 때문에 예외처리
return role;
}
}
Role.java
package kr.or.connect.jdbcexam.dto;
public class Role {
private Integer roleId;
private String description;
//자바에서 필드명은 항상 소문자로 시작,
//단어 두개이상 연결될 때는 두번쨰 단어의 첫글자를 대문자
//--> 카멜 표기법
public Role(Integer roleId, String description) {
super();
this.roleId = roleId;
this.description = description;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
//Role에 들어있는 값들을 편하게 출력할 목적으로 toString() 메서드를 오버라이딩
@Override
public String toString() {
return "Role [roleId=" + roleId + ", description=" + description + "]";
}
}