728x90
728x90
- DTO, DAO 설명 : https://young0105.tistory.com/125
# 사용된 인터페이스
1) Connection
2) Statement
3) ResultSet
코드
# DTO
public class BuyDTO {
// 테이블 구조 확인하고 멤버변수 선언하기
private String userName;
private String productName;
private int price;
private int amount;
// 생성자
public BuyDTO(String userName, String productName, int price, int amount) {
this.userName = userName;
this.productName = productName;
this.price = price;
this.amount = amount;
}
// get 메서드
public String getUserName() {
return userName;
}
public String getProductName() {
return productName;
}
public int getPrice() {
return price;
}
public int getAmount() {
return amount;
}
}
# DAO가 사용할 인터페이스
public interface IBuyDAO {
// 결과 집합을 반환함
ArrayList<BuyDTO> select();
// 적용된 레코드 수를 반환함
int insert(BuyDTO buyDTO);
// 적용된 레코드 수를 반환함
int update(BuyDTO buyDTO, String targetUserName, String targetProductName);
void delete(String targetUserName);
}
728x90
# DAO
public class BuyDAO implements IBuyDAO {
// DB에 연결
DBClient dbClient;
Connection conn;
Statement stmt;
ResultSet rs;
public BuyDAO() {
dbClient = DBClient.getInstance(); // DBClient 클래스는 싱글톤 패턴으로 구현함
// 코드 축약하기
// conn = dbClient.getConnection();을 메서드 내에서 반복하지 않고, 생성자에서 실행
// DBClient 생성자에 conn = getConnection(); 추가해주면 가능
conn = dbClient.getConnection();
}
// 전체 조회 기능
@Override
public ArrayList<BuyDTO> select() {
// TIP : 반환할 데이터 타입으로 먼저 지역변수를 만들어 주고, return에 넣기
ArrayList<BuyDTO> list = new ArrayList<>();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM buytbl ");
// 레코드 하나씩 반복
while (rs.next()) {
// rs.getString의 매개변수는 결과집합에 표시되는 컬럼명대로 !!!
String userName = rs.getString("userName");
String productName = rs.getString("productName");
int price = rs.getInt("price");
int amount = rs.getInt("amount");
BuyDTO dto = new BuyDTO(userName, productName, price, amount);
list.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 최근에 사용한 것부터 close()
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
} // end of select method
// 데이터 추가 기능
@Override
public int insert(BuyDTO dto) {
int rowCount = 0;
String sqlFormat = "INSERT INTO buytbl (userName, productName, price, amount) "
+ "VALUES ('%s', '%s', %d, %d) ";
String sql = String.format(sqlFormat, dto.getUserName(), dto.getProductName(),
dto.getPrice(), dto.getAmount());
try {
stmt = conn.createStatement();
// DML을 사용할 때는 executeUpdate 메서드임에 유의!
rowCount = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return rowCount;
}
// 값 갱신 기능
@Override
public int update(BuyDTO dto, String targetUserName, String targetProductName) {
int rowCount = 0;
String sqlFormat = "UPDATE buytbl SET productName = '%s', price = %d, amount = %d "
+ "WHERE userName = '%s' AND productName = '%s' ";
String sql = String.format(sqlFormat, dto.getProductName(), dto.getPrice(), dto.getAmount(),
targetUserName, targetProductName);
try {
// DML을 사용할 때는 executeUpdate 메서드임에 유의!
stmt = conn.createStatement();
rowCount = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return rowCount;
}
@Override
public void delete(String targetUserName) {
String sqlFormat = " DELETE FROM buytbl WHERE userName = '%s' ";
String sql = String.format(sqlFormat, targetUserName);
try {
// DML을 사용할 때는 executeUpdate 메서드임에 유의!
stmt = conn.createStatement();
stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} // end of class
# Main
public static void main(String[] args) {
int rowCount;
// 생성자에 지정해놔서 DBClient 객체도 같이 생성됨
BuyDAO buyDAO = new BuyDAO();
// insert
rowCount = buyDAO.insert(new BuyDTO("야스오", "책", 10, 3));
System.out.println(rowCount);
// update
rowCount = buyDAO.update(new BuyDTO("홍길동", "책", 3000, 3), "홍길동", "책");
System.out.println(rowCount);
// delete
buyDAO.delete("야스오");
// select
// select 결과를 list로 반환받음
ArrayList<BuyDTO> list = buyDAO.select();
// for each : 결과 집합 확인
for (BuyDTO dto : list) {
System.out.println("구매자 : " + dto.getUserName());
System.out.println("상품 : " + dto.getProductName());
System.out.println("개당 가격 : " + dto.getPrice());
System.out.println("구매 수량 : " + dto.getAmount());
System.out.println("========");
}
} // end of main
320x100
반응형
'Java > Base' 카테고리의 다른 글
[Java] JSON (0) | 2023.03.15 |
---|---|
[Java] Statement와 PreparedStatement (1) | 2023.03.12 |
[Java] Java와 MySQL 데이터베이스 연결하기 (0) | 2023.03.09 |
[Java] 소켓 양방향 통신 구현 (0) | 2023.03.04 |
[Java] 소켓 통신 (0) | 2023.03.03 |