728x90
DB에 상품번호(PK), 이름(NAME), 재고(CNT), 가격(PRICE)을 컬럼으로 가진
PRODUCT 테이블을 이용하여 CRUD를 구현
편의성을 위하여 DB연결과 해제를 효율적으로 하기 위해 JDBCUtil 클래스 생성
public class JDBCUtil {
static final String driverName="oracle.jdbc.driver.OracleDriver";
static final String url="jdbc:oracle:thin:@localhost:1521:xe";
static final String user="kim";
static final String password="1234";
public static Connection connect() {
Connection conn = null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void disconnect(PreparedStatement pstmt,Connection conn) {
try {
pstmt.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
CREATE
final String sql_insert="INSERT INTO PRODUCT VALUES((SELECT NVL(MAX(PID),0)+1 FROM PRODUCT),?,?,?)";
// 프로덕트 테이블에 해당 정보들을 가진 객체 추가
public boolean insert(ProductVO vo) { // 객체를 인자로 받아 정보를 DB에 추가
conn = JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_insert); // pstmt 객체 생성하여 쿼리문 입력
pstmt.setString(1,vo.getPname()); // 첫번째 ?에 이름 대입
pstmt.setInt(2, vo.getCnt()); // 두번째 ?에 재고 대입
pstmt.setInt(3, vo.getPrice()); // 세번째 ?에 가격 대입
int res = pstmt.executeUpdate(); // 완성된 쿼리문 실행
if(res<=0) {
System.out.println("로그: 구매 실패...");
return false; // 실행 실패시 반환
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return true; // 실행 성공시 반환
}
READ
final String sql_selectAll="SELECT * FROM PRODUCT";
// 프로덕트 테이블 전체를 가져옴
public ArrayList<ProductVO> selectAll(ProductVO vo) { // 테이블 전체값 반환
ArrayList<ProductVO> datas = new ArrayList<ProductVO>();
conn = JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_selectAll); // pstmt 객체생성하여 쿼리문 입력
ResultSet rs = pstmt.executeQuery();
while(rs.next()) { // 입력될 값이 있으면 계속 반복
ProductVO data = new ProductVO(); // 상품 객체 생성
data.setCnt(rs.getInt("CNT")); // 생성된 객체에 상품의 재고 대입
data.setPname(rs.getString("PNAME")); // 이름 대입
data.setPid(rs.getInt("PID")); // PID 대입
data.setPrice(rs.getInt("PRICE")); // PRICE 대입
datas.add(data); // 값이 대입된 객체 배열에 추가
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return datas; // 테이블 전체값이 들어간 객체 배열 반환
}
}
final String sql_selectOne="SELECT * FROM PRODUCT WHERE PID=?";
// PID를 입력받아 프로덕트 테이블의 일치하는 정보 출력
public ProductVO selectOne(ProductVO vo) {
conn = JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_selectOne); // pstmt객체생성하여 쿼리문 작성
pstmt.setInt(1,vo.getPid()); // DB에서 매칭할 상품의 PID 입력
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
ProductVO data = new ProductVO(); // 객체에 정보전달
data.setCnt(rs.getInt("CNT"));
data.setPname(rs.getString("PNAME"));
data.setPid(rs.getInt("PID"));
data.setPrice(rs.getInt("PRICE"));
return data; // 정보를 전달받은 객체 리턴
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return null;
}
}
UPDATE
final String sql_update="UPDATE PRODUCT SET CNT=CNT-1 WHERE PID=?";
// PID를 입력받아 프로덕트 테이블의 일치하는 상품의 재고 -1
public boolean update(ProductVO vo) { // 상품구매 메서드
conn = JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_update); // pstmt 객체에 쿼리문 작성
pstmt.setInt(1,vo.getPid()); // 구매할 상품의 PID 매칭
int res = pstmt.executeUpdate();
if(res<=0) {
System.out.println("로그: 구매 실패...");
return false; // pstmt 실행 못하면 false 리턴
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false; // Exception 발생시 false 리턴
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return true; // 성공시 true 리턴
}
}
DELETE
final String sql_delete="DELETE PRODUCT WHERE PID=?";
// PID를 입력받아 프로덕트 테이블의 일치하는 상품 삭제
public boolean delete(ProductVO vo) { // 삭품삭제 메서드
conn = JDBCUtil.connect();
try {
pstmt = conn.prepareStatement(sql_delete);
pstmt.setInt(1,vo.getPid());
int res = pstmt.executeUpdate();
if(res<=0) {
System.out.println("로그: 구매 실패...");
return false;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return true;
}
}
728x90
'Java > study' 카테고리의 다른 글
| 웹 크롤링해서 CGV 상영 영화 정보 DB에 넣기 (0) | 2022.07.17 |
|---|---|
| 웹크롤링하여 DB에 데이터 넣기 (0) | 2022.07.14 |
| MVC 모델을 이용한 자판기 프로그램 (0) | 2022.07.13 |
| PrepareStatement 이용하기 (0) | 2022.07.05 |
| JAVA에 DB연동하기 (0) | 2022.07.04 |