JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API입니다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공합니다.
자신의 컴퓨터에 mysql, oracle, mariadb 중 하나라도 설치가 되어 있어야 연동이 가능하고 DB 종류에 관계없이 동일한 API를 제공합니다.
JDBC를 사용하기위해서 드라이버를 이클립스 안에 설치해야하는데요.
여기서 설치 방법을 볼 수 있습니다 -> [JAVA] JDBC 사용해보기 #1 - 오라클 JDBC 드라이버 불러오기
DB와 연동하는 DBConnect.java는 [JAVA] JDBC 사용해보기 #2 - DB 접속 코드 예제 ( Select, Insert, Update, Delete ) , DTO와 같이 사용해보기 여기서 자세하게 볼 수 있습니다.
이제 본격적으로 DTO, DAO를 사용해봅시다.
DBConnect.java
package test.util;
import java.sql.Connection;
import java.sql.DriverManager;
/*
* 객체를 생성해서 메소드를 호출하면 Connection 객체를 리턴하는 객체를 생성할 클래스 설계하기
*/
public class DBConnect {
//Connection 객체의 참조값을 담을 필드 선언
private Connection conn;
//생성자에서 Connection 객체를 얻어오는 작업을 한다.
public DBConnect() {
try {
//오라클 드라이버 클래스 로딩(OracleDriver 클래스를 사용할 준비를 한다)
Class.forName("oracle.jdbc.driver.OracleDriver");
//접속할 DB 의 정보
String url="jdbc:oracle:thin:@localhost:1521:xe";
//DB 연결 객체의 참조값 얻어와서 필드에 담기
conn=DriverManager.getConnection(url, "scott", "tiger");
//예외가 발생하지 않고 여기까지 실행순서가 진행이되면 접속 성공이다.
System.out.println("Oracle DB 접속 성공!");
}catch(Exception e){
}
}
//Connection 객체를 리턴하는 메소드
public Connection getConn() {
return conn;
}
}
DBConnect 클래스는 DB와 연결해주는 코드입니다. 위에 링크를 달아놓았지만 혹시 몰라 한번 더 넣겠습니다.
자세한 설명은 [JAVA] JDBC 사용해보기 #2 - DB 접속 코드 예제 ( Select, Insert, Update, Delete ) , DTO와 같이 사용해보기 여기서 자세하게 볼 수 있습니다.
company table
저는 오라클에 company table을 생성해주었습니다.
이 company 테이블에서 삽입, 삭제, 갱신, 조회를 해볼 것 입니다.
create table company(
empno number primary key,
ename varchar2(12) not null,
job varchar2(16) not null,
hiredate date );
company 테이블 생성 코드입니다.
빈 테이블이 생성된 것을 볼 수 있습니다.
CompanyDto.java
package test.dto;
public class CompanyDto {
private int empno;
private String ename;
private String job;
private String hiredate;
public CompanyDto() {
super();
}
public CompanyDto(int empno, String ename, String job, String hiredate) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
this.hiredate = hiredate;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getHiredate() {
return hiredate;
}
public void setHiredate(String hiredate) {
this.hiredate = hiredate;
}
}
DTO를 생성해줍니다. DTO를 만드는 방법은 [JAVA] DTO vs VO vs Entity / DTO 살펴보기 여기에서 자세히 볼 수 있습니다.
CompanyDao.java
package test.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import test.dto.CompanyDto;
import test.util.DBConnect;
public class CompanyDao {
public boolean insert(CompanyDto dto) {
//필요한 객체를 담을 지역 변수 미리 만들기
Connection conn = null;
PreparedStatement pstmt = null;
int flag = 0;
try {
//Connection 객체의 참조값 얻어오기
conn = new DBConnect().getConn();
//실행할 sql 문의 뼈대 미리 준비하기
String sql = "INSERT INTO company"
+ " (empno,ename,job,hiredate)"
+ " VALUES(company_seq.NEXTVAL,?,?,SYSDATE)";
//PreparedStatement 객체의 참조값 얻어오기
pstmt = conn.prepareStatement(sql);
//? 에 필요한값 바인딩하기
pstmt.setString(1, dto.getEname());
pstmt.setString(2, dto.getJob());
//sql 문 실행하기 (INSERT, UPDATE, DELETE)
flag = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
}
}
if (flag > 0) {
//성공
return true;
} else {
//실패
return false;
}
}
public boolean update(CompanyDto dto) {
//필요한 객체를 담을 지역 변수 미리 만들기
Connection conn = null;
PreparedStatement pstmt = null;
int flag = 0;
try {
//Connection 객체의 참조값 얻어오기
conn = new DBConnect().getConn();
//실행할 sql 문의 뼈대 미리 준비하기
String sql = "UPDATE Company"
+" SET ename=?, job=?"
+" WHERE empno=?";
//PreparedStatement 객체의 참조값 얻어오기
pstmt = conn.prepareStatement(sql);
//? 에 필요한값 바인딩하기
pstmt.setString(1, dto.getEname());
pstmt.setString(2, dto.getJob());
pstmt.setInt(3, dto.getEmpno());
//sql 문 실행하기 (INSERT, UPDATE, DELETE)
flag = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
}
}
if (flag > 0) {
//성공
return true;
} else {
//실패
return false;
}
}
public boolean delete(CompanyDto dto) {
//필요한 객체를 담을 지역 변수 미리 만들기
Connection conn = null;
PreparedStatement pstmt = null;
int flag = 0;
try {
//Connection 객체의 참조값 얻어오기
conn = new DBConnect().getConn();
//실행할 sql 문의 뼈대 미리 준비하기
String sql = "DELETE FROM Company"
+" WHERE empno=?";
//PreparedStatement 객체의 참조값 얻어오기
pstmt = conn.prepareStatement(sql);
//? 에 필요한값 바인딩하기
pstmt.setInt(1, dto.getEmpno());
//sql 문 실행하기 (INSERT, UPDATE, DELETE)
flag = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
}
}
if (flag > 0) {
//성공
return true;
} else {
//실패
return false;
}
}
public CompanyDto getData(int empno) {
//필요한 객체를 담을 지역 변수 미리 만들기
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
CompanyDto dto = null;
try {
//Connection 객체의 참조값 얻어오기
conn = new DBConnect().getConn();
//실행할 sql 문의 뼈대 미리 준비하기
String sql = "SELECT ename, job, TO_CHAR(hiredate,'YYYY.mm.dd') as hiredate"
+" FROM Company"
+ " WHERE empno = ?";
//PreparedStatement 객체의 참조값 얻어오기
pstmt = conn.prepareStatement(sql);
//? 에 필요한값 바인딩하기
pstmt.setInt(1, empno);
//select 문 수행하고 결과를 ResultSet 으로 받아오기
rs = pstmt.executeQuery();
if (rs.next()) {
//cursor 가 위치한 곳의 칼럼 데이터를 빼오기
dto = new CompanyDto();
dto.setEmpno(empno);
dto.setEname(rs.getString("ename"));
dto.setJob(rs.getString("job"));
dto.setHiredate(rs.getString("hiredate"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
}
}
return dto;
}
public List<CompanyDto> getList(){
//필요한 객체를 담을 지역 변수 미리 만들기
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<CompanyDto> list = new ArrayList<>();
try {
//Connection 객체의 참조값 얻어오기
conn = new DBConnect().getConn();
//실행할 sql 문의 뼈대 미리 준비하기
String sql = "SELECT empno, ename, job, TO_CHAR(hiredate,'YYYY.mm.dd') as hiredate"
+" FROM Company";
//PreparedStatement 객체의 참조값 얻어오기
pstmt = conn.prepareStatement(sql);
//? 에 필요한값 바인딩하기
//select 문 수행하고 결과를 ResultSet 으로 받아오기
rs = pstmt.executeQuery();
while (rs.next()) {
//cursor 가 위치한 곳의 칼럼 데이터를 빼오기
CompanyDto dto = new CompanyDto();
dto.setEmpno(rs.getInt("empno"));
dto.setEname(rs.getString("ename"));
dto.setJob(rs.getString("job"));
dto.setHiredate(rs.getString("hiredate"));
list.add(dto);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
}
}
return list;
}
}
Dao 전체 코드입니다. 입력, 수정, 삭제, 한명의 정보 불러오기, 사원 목록 불러오기 기능을 만들었습니다.
MainClass17.java
package test.main;
import java.util.ArrayList;
import java.util.List;
import test.dao.CompanyDao;
import test.dto.CompanyDto;
public class MainClass17 {
public static void main(String[] args) {
/* company 테이블에 사원정보를 관리하는 프로그래밍을 해보세요.
* 1. CompanyDto를 만드세요
*
* 2. CompanyDao를 만드세요.
* 입력, 수정, 삭제, 한명의 정보 불러오기, 사원 목록 불러오기
* 기능을 만들면 됩니다.
*
* 3. 각각의 기능을 테스트 할 수 있는 main 메소드를 만들어서 테스트해보세요.
*
*/
CompanyDao dao = new CompanyDao();
CompanyDto dto1 = new CompanyDto();
dto1.setEname("이00");
dto1.setJob("개발");
boolean isSuccess = dao.insert(dto1);
if(isSuccess) {
System.out.println("삽입 성공");
}else {
System.out.println("삽입 실패");
}
CompanyDto dto2 = new CompanyDto();
dto2.setEmpno(1);
dto2.setEname("최00");
dto2.setJob("전산");
boolean isSuccess2 = dao.update(dto2);
if(isSuccess2) {
System.out.println("갱신 성공");
}else {
System.out.println("갱신 실패");
}
CompanyDto dto3 = new CompanyDto();
dto3.setEmpno(4);
boolean isSuccess3 = dao.delete(dto3);
if(isSuccess3) {
System.out.println("삭제 성공");
}else {
System.out.println("삭제 실패");
}
CompanyDto dto4 = dao.getData(1);
if(dto4!=null) {
System.out.println(dto4.getEmpno() + " | " + dto4.getEname() + " | " +dto4.getJob() + " | " +dto4.getHiredate());
}else {
System.out.println("조회 내역이 없습니다.");
}
List<CompanyDto> list = new ArrayList<>();
list = dao.getList();
if(list.size()==0) {
System.out.println("조회 내역이 없습니다.");
}else {
for(CompanyDto tmp:list) {
System.out.println(tmp.getEmpno() + " | " + tmp.getEname() + " | " +tmp.getJob() + " | " +tmp.getHiredate());
}
}
}
}
MainClass 입니다. 하나씩 실행시키면 DB를 조작하거나 바꾸는 모습을 볼 수 있습니다.
'Languages > JAVA' 카테고리의 다른 글
[JAVA] 상속 알아보기 #2 - this, super (0) | 2021.11.15 |
---|---|
[JAVA] 상속 알아보기 #1 - 기본 개념, 오버라이딩, 생성자 호출, 다형성 (0) | 2021.11.15 |
[JAVA] DTO vs DAO vs VO 개념 정리 (0) | 2021.11.12 |
[JAVA] 이클립스에서 나만의 템플릿 만들기 / 자동 생성 (0) | 2021.11.12 |
[JAVA] JDBC 사용해보기 #2 - DB 접속 코드 예제 ( Select, Insert, Update, Delete ) , DTO와 같이 사용해보기 (0) | 2021.11.12 |