일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 무한
- Jenkins
- unboxing
- 내장객체
- Short
- 메소드
- 싱글톤
- bootstrap
- 빌드
- 싱글턴
- Java
- 스프링
- 언박싱
- maven
- 콜렉션
- Scanner
- 컬렉션
- dependency
- 제네릭
- wrapper
- 자동형변환
- 인텔리제이
- 클래스
- 제너릭
- suvlet
- https://start.spring.io
- boxing
- start.spring.io
- 루프
- 박싱
Archives
- Today
- Total
Developer Gonie
[7주차] 8. select, insert, update, delete 를 종합해서 다루는 예제(DAO, DTO) 본문
K-DigitalTraining 강의/3. JDBC(Java + Oracle DB)
[7주차] 8. select, insert, update, delete 를 종합해서 다루는 예제(DAO, DTO)
이대곤 2022. 6. 23. 12:11* 아래의 의미들을 이용해 클래스 이름을 정하는데 참고했다.
DAO(Data Access Objects) -> 아래서 PersonDao 클래스
-DB를 사용해 데이터를 조회하거나 조작을 전담하는 오브젝트로 DB와의 연결을 담당하기도 한다.
- 저장소(테이블)에 데이터를 입력, 조회, 수정, 삭제 등의 처리를 한다.
DTO(Data Transfer Object) -> 아래서 PersonBean 클래스
- 데이터의 전달을 위해 만드는 오브젝트
- 데이터를 담을 private 변수와 그 변수를 조작할 수 있는 public의 getter, setter 메서드로 구성한다.
- bean 또는 vo(value object)라고도 한다.
-- 초기 데이터셋 생성
drop sequence prdseq;
create sequence prdseq
increment by 1
start with 1
minvalue 1
nocache;
drop table products;
create table products(
id number primary key,
name varchar2(30),
stock number,
price number,
category varchar2(30),
inputdate date default sysdate
);
insert into products values(prdseq.nextval,'mp3',20,300,'IT', default);
insert into products values(prdseq.nextval,'갤럭시S6',30,200,'IT', default);
insert into products values(prdseq.nextval,'iPhone',40,500,'IT', default);
insert into products values(prdseq.nextval,'세탁기',20,300,'KJ', default);
insert into products values(prdseq.nextval,'냉장고',30,200,'KJ', default);
insert into products values(prdseq.nextval,'TV',40,500,'KJ', default);
insert into products values(prdseq.nextval,'Computer',20,300,'IT', default);
insert into products values(prdseq.nextval,'iMac',30,200,'IT', default);
commit ;
select * from products ;
ProductMain 클래스.java
import java.util.Scanner;
import java.util.ArrayList;
public class ProductMain {
//static 메서드에서 사용되는 객체들은 static으로 선언해줘야 함.(일반 지역변수 제외)
static Scanner sc = new Scanner(System.in);
static ProductDao dao = new ProductDao();
public static void main(String[] args) {
init();
}
public static void init() {
while(true) {
System.out.println();
System.out.println("===메뉴 선택===");
System.out.println("1.모든 상품 조회");
System.out.println("2.특정 상품 조회(아이디 이용)");
System.out.println("3.특정 상품 조회(카테고리 이용)");
System.out.println("4.상품 수정");
System.out.println("5.상품 삭제");
System.out.println("6.상품 추가");
System.out.println("7.프로그램 종료");
System.out.print("번호 입력>>");
int munu = sc.nextInt();
switch(munu) {
case 1:
ArrayList<ProductBean> lists = dao.getAllProduct();
showProducts(lists);
break;
case 2:
getProductById();
break;
case 3:
getProductByCategory();
break;
case 4:
updateData();
break;
case 5:
deleteData();
break;
case 6:
insertData();
break;
case 7:
System.out.println("프로그램을 종료합니다.");
System.exit(0);
break;
default : System.out.println("1~7사이의 번호만 입력 가능");
}
}
}
static void showProducts(ArrayList<ProductBean> lists) {
// for (ProductBean pb : lists) {
// System.out.println(pb.toString());
// }
for (int i = 0; i < lists.size(); i++) {
ProductBean pb = lists.get(i);
System.out.println(pb.toString());
// System.out.println(pb.getId() +","+ pb.getName() +","+ pb.getStock() +","+ pb.getPrice() +","+ pb.getCategory() +","+ pb.getInputdate());
}
}
private static void getProductById() {
System.out.print("검색할 아이디 입력 : ");
int id = sc.nextInt();
ProductBean pb = dao.getProductById(id);
if (pb == null)
System.out.println("찾는 아이디의 레코드가 존재하지 않습니다.");
else
System.out.println(pb.toString());
}
private static void getProductByCategory() {
System.out.print("검색할 카테고리 입력(IT/KJ) : ");
String cate = sc.next().toUpperCase();
ArrayList<ProductBean> lists = dao.getProductByCategory(cate);
if (lists.size() == 0)
System.out.println("찾는 카테고리가 없습니다.");
else
showProducts(lists);
}
private static void insertData() {
System.out.println("id는 시퀀스로 입력됩니다.");
System.out.print("상품명 입력:");
String name = sc.next();
System.out.print("재고수량 입력:");
int stock = sc.nextInt();
System.out.print("가격 입력:");
int price = sc.nextInt();
System.out.print("카테고리 입력:");
String category = sc.next();
System.out.print("입고일자 입력:");
String inputdate = sc.next();
ProductBean bean = new ProductBean();
bean.setName(name);
bean.setStock(stock);
bean.setPrice(price);
bean.setCategory(category);
bean.setInputdate(inputdate);
int cnt = dao.insertProduct(bean);
if(cnt > 0)
System.out.println("insert 성공");
else
System.out.println("insert 실패");
}
private static void deleteData() {
System.out.print("삭제할 id 입력: ");
int id = sc.nextInt();
int cnt = dao.deleteProduct(id);
if(cnt > 0)
System.out.println("삭제 성공");
else
System.out.println("삭제 실패");
}
private static void updateData() {
System.out.print("수정할 id 입력: ");
int id = sc.nextInt();
System.out.print("상품명 입력:");
String name = sc.next();
System.out.print("재고수량 입력:");
int stock = sc.nextInt();
System.out.print("가격 입력:");
int price = sc.nextInt();
System.out.print("카테고리 입력:");
String category = sc.next();
System.out.print("입고일자 입력:");
String inputdate = sc.next();
ProductBean bean = new ProductBean();
bean.setId(id);
bean.setName(name);
bean.setStock(stock);
bean.setPrice(price);
bean.setCategory(category);
bean.setInputdate(inputdate);
int cnt = dao.updateProduct(bean);
if(cnt > 0)
System.out.println("update 성공");
else if(cnt == 0)
System.out.println("조건에 맞는 레코드가 없음");
else
System.out.println("update 실패");
}
}
ProductDao 클래스.java
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class ProductDao {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String id = "jspid";
String pw = "jsppw";
Connection conn = null;
ProductDao() {
try {
// 1. 드라이버 로드
Class.forName(driver);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패");
}
}
public void connect() {
try {
// 2. 계정에 접속
conn = DriverManager.getConnection(url, id, pw);
} catch (SQLException e) {
System.out.println("계정 접속 실패");
;
}
}
public ArrayList<ProductBean> getAllProduct() {
// 2. 계정에 접속
connect();
System.out.println("conn:" + conn);
ArrayList<ProductBean> lists = new ArrayList<ProductBean>();
try {
// 3. SQL문 작성, 분석
String sql = "select * from products";
PreparedStatement ps = conn.prepareStatement(sql);
// 4. SQL문 실행
ResultSet rs = ps.executeQuery();
while (rs.next()) {
ProductBean bean = new ProductBean();
int id = rs.getInt("id");
bean.setId(id);
String name = rs.getString("name");
bean.setName(name);
int stock = rs.getInt("stock");
bean.setStock(stock);
int price = rs.getInt("price");
bean.setPrice(price);
String category = rs.getString("category");
bean.setCategory(category);
//이걸 안하고 바로 getString()으로 받아 출력해보면 '초'까지 출력되어 원하는 결과가 아니라 이걸 거치는 것임
Date inputdate = rs.getDate("inputdate"); // Date 타입이 java.sql.Date 라는점에 주의
String sinputdate = String.valueOf(inputdate);
bean.setInputdate(sinputdate);
lists.add(bean);
}
} catch (SQLException e) {
e.printStackTrace();
} finally { // try문 마치기전 반드시 해야할게 있다면 finally 에서 작성
try {
// 5. 연결 종료
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return lists;
}// getAllProduct()
public ProductBean getProductById(int vid) {
// 2. 계정에 접속
connect();
System.out.println("conn:" + conn);
ProductBean bean = null;
try {
// 3. SQL문 작성, 분석
String sql = "select * from products where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, vid);
// 4. SQL문 실행
ResultSet rs = ps.executeQuery();
bean = new ProductBean();
if (rs.next()) {
int id = rs.getInt("id");
bean.setId(id);
String name = rs.getString("name");
bean.setName(name);
int stock = rs.getInt("stock");
bean.setStock(stock);
int price = rs.getInt("price");
bean.setPrice(price);
String category = rs.getString("category");
bean.setCategory(category);
//이걸 안하고 바로 getString()으로 받아 출력해보면 '초'까지 출력되어 원하는 결과가 아니라 이걸 거치는 것임
Date inputdate = rs.getDate("inputdate"); // Date 타입이 java.sql.Date 라는점에 주의
String sinputdate = String.valueOf(inputdate);
bean.setInputdate(sinputdate);
}
} catch (SQLException e) {
e.printStackTrace();
} finally { // try문 마치기전 반드시 해야할게 있다면 finally 에서 작성
try {
// 5. 연결 종료
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return bean;
}// getProductById()
public ArrayList<ProductBean> getProductByCategory(String cate) {
// 2. 계정에 접속
connect();
System.out.println("conn:" + conn);
ArrayList<ProductBean> lists = new ArrayList<ProductBean>();
try {
// 3. SQL문 작성, 분석
String sql = "select * from products where category = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, cate);
// 4. SQL문 실행
ResultSet rs = ps.executeQuery();
while (rs.next()) {
ProductBean bean = new ProductBean();
int id = rs.getInt("id");
bean.setId(id);
String name = rs.getString("name");
bean.setName(name);
int stock = rs.getInt("stock");
bean.setStock(stock);
int price = rs.getInt("price");
bean.setPrice(price);
String category = rs.getString("category");
bean.setCategory(category);
//이걸 안하고 바로 getString()으로 받아 출력해보면 '초'까지 출력되어 원하는 결과가 아니라 이걸 거치는 것임
Date inputdate = rs.getDate("inputdate"); // Date 타입이 java.sql.Date 라는점에 주의
String sinputdate = String.valueOf(inputdate);
bean.setInputdate(sinputdate);
lists.add(bean);
}
} catch (SQLException e) {
e.printStackTrace();
} finally { // try문 마치기전 반드시 해야할게 있다면 finally 에서 작성
try {
// 5. 연결 종료
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return lists;
}// getProductByCategory()
public int insertProduct(ProductBean bean) {
// 2. 계정에 접속
connect();
System.out.println("conn:" + conn);
int result = -1;
try {
// 3. SQL문 작성, 분석
String sql = "insert into products values(prdseq.nextval, ?, ?, ?, ?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, bean.getName());
ps.setInt(2, bean.getStock());
ps.setInt(3, bean.getPrice());
ps.setString(4, bean.getCategory());
ps.setString(5, bean.getInputdate());
// 4. SQL문 실행
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally { // try문 마치기전 반드시 해야할게 있다면 finally 에서 작성
try {
// 5. 연결 종료
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}// insertProduct()
public int deleteProduct(int id) {
// 2. 계정에 접속
connect();
System.out.println("conn:" + conn);
int result = -1;
try {
// 3. SQL문 작성, 분석
String sql = "delete from products where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, id);
// 4. SQL문 실행
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally { // try문 마치기전 반드시 해야할게 있다면 finally 에서 작성
try {
// 5. 연결 종료
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}// deleteProduct()
public int updateProduct(ProductBean bean) {
// 2. 계정에 접속
connect();
System.out.println("conn:" + conn);
int result = -1;
try {
System.out.println(bean);
// 3. SQL문 작성, 분석
String sql = "update products set name = ?, stock = ?, price = ?, category = ?, inputdate = ? where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, bean.getName());
ps.setInt(2, bean.getStock());
ps.setInt(3, bean.getPrice());
ps.setString(4, bean.getCategory());
ps.setString(5, bean.getInputdate());
ps.setInt(6, bean.getId());
// 4. SQL문 실행
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally { // try문 마치기전 반드시 해야할게 있다면 finally 에서 작성
try {
// 5. 연결 종료
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}// updateProduct()
}
ProductBean.java
public class ProductBean {
private int id;
private String name;
private int stock;
private int price;
private String category;
private String inputdate;
public ProductBean() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getInputdate() {
return inputdate;
}
public void setInputdate(String inputdate) {
this.inputdate = inputdate;
}
public String toString() {
return id + "," + name + "," + stock + "," + price + "," + category + "," + inputdate;
}
}
실행결과
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>1
conn:oracle.jdbc.driver.T4CConnection@6e171cd7
1,mp3,20,300,IT,2022-06-22
2,갤럭시S6,30,200,IT,2022-06-22
3,iPhone,40,500,IT,2022-06-22
4,세탁기,20,300,KJ,2022-06-22
5,냉장고,30,200,KJ,2022-06-22
6,TV,40,500,KJ,2022-06-22
7,Computer,20,300,IT,2022-06-22
8,iMac,30,200,IT,2022-06-22
12,S10,30,3000,IT,2020-06-25
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>2
검색할 아이디 입력 : 1
conn:oracle.jdbc.driver.T4CConnection@6cce16f4
1,mp3,20,300,IT,2022-06-22
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>3
검색할 카테고리 입력(IT/KJ) : IT
conn:oracle.jdbc.driver.T4CConnection@291a7e3c
1,mp3,20,300,IT,2022-06-22
2,갤럭시S6,30,200,IT,2022-06-22
3,iPhone,40,500,IT,2022-06-22
7,Computer,20,300,IT,2022-06-22
8,iMac,30,200,IT,2022-06-22
12,S10,30,3000,IT,2020-06-25
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>4
수정할 id 입력: 12
상품명 입력:S21
재고수량 입력:50
가격 입력:2000
카테고리 입력:IT
입고일자 입력:2023-09-09
conn:oracle.jdbc.driver.T4CConnection@1046d517
12,S21,50,2000,IT,2023-09-09
update 성공
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>1
conn:oracle.jdbc.driver.T4CConnection@73cd37c0
1,mp3,20,300,IT,2022-06-22
2,갤럭시S6,30,200,IT,2022-06-22
3,iPhone,40,500,IT,2022-06-22
4,세탁기,20,300,KJ,2022-06-22
5,냉장고,30,200,KJ,2022-06-22
6,TV,40,500,KJ,2022-06-22
7,Computer,20,300,IT,2022-06-22
8,iMac,30,200,IT,2022-06-22
12,S21,50,2000,IT,2023-09-09
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>5
삭제할 id 입력: 12
conn:oracle.jdbc.driver.T4CConnection@2bb3058
삭제 성공
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>6
id는 시퀀스로 입력됩니다.
상품명 입력:S222
재고수량 입력:50
가격 입력:6000
카테고리 입력:IT
입고일자 입력:2025-05-02
conn:oracle.jdbc.driver.T4CConnection@14fc1f0
insert 성공
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>1
conn:oracle.jdbc.driver.T4CConnection@512baff6
1,mp3,20,300,IT,2022-06-22
2,갤럭시S6,30,200,IT,2022-06-22
3,iPhone,40,500,IT,2022-06-22
4,세탁기,20,300,KJ,2022-06-22
5,냉장고,30,200,KJ,2022-06-22
6,TV,40,500,KJ,2022-06-22
7,Computer,20,300,IT,2022-06-22
8,iMac,30,200,IT,2022-06-22
13,S222,50,6000,IT,2025-05-02
===메뉴 선택===
1.모든 상품 조회
2.특정 상품 조회(아이디 이용)
3.특정 상품 조회(카테고리 이용)
4.상품 수정
5.상품 삭제
6.상품 추가
7.프로그램 종료
번호 입력>>
'K-DigitalTraining 강의 > 3. JDBC(Java + Oracle DB)' 카테고리의 다른 글
[7주차] 10. executeUpdata()의 결과를 반환받는 변수를 -1로 초기화 하는 이유 (0) | 2022.06.24 |
---|---|
[7주차] 9. Javabean 규약에서 클래스의 멤버변수가 private 인 이유 (0) | 2022.06.24 |
[7주차] 7. SQL 쿼리문 작성시 사용하는 place 홀더(위치 홀더) '?' 사용법 및 주의사항 (0) | 2022.06.23 |
[7주차] 6. delete 문 실행하기 (0) | 2022.06.21 |
[7주차] 5. update 문 실행하기 (0) | 2022.06.20 |
Comments