https://everysmallstep.tistory.com/121
-> 기본 SELECT문을 가지고 약간씩 변형하게 된다.
JAVA와 DB의 연동 DELETE문
-> 입력받은 사원번호를 통해 사원번호에 맞는 사원을 삭제하는 프로그램 작성
0. 수정할 데이터를 입력받기
- 삭제할 사원 번호(empno) 입력 받는다.
System.out.print("삭제할 사원 번호 -> ");
int no = Integer.parseInt(scan.nextLine());
여기서 굳이 입력값을 String형으로 받아서 Int형으로 바꿔준 이유는 값을 입력하고 나서도 실행이 바로 되는게 아니라 엔터를 또 눌러야지만 실행이 되기 떄문이다. nextLine으로 한 라인의 값을 받으면 굳이 삭제할 값을 입력하고 난뒤에 엔터를 치지 않아도 작업이 실행된다.
1. JDBC 드라이버 load
public class DeleteTest {
public DeleteTest() { // 객체 생성할 때 한 번만 실행, 생성자
}
public void start() {
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // 폴더에 들어가서 Driver.class가 있는 파일의 경로를 적기
} catch (Exception e) {}
}
}
2. CONNECTION 객체 생성(DB연결)
Connection con = null;
String url = "jdbc:mysql://127.0.0.1/demo"; // 서버 IP주소/DB명
con = DriverManager.getConnection(url, "root", "root1106");
3. PreparedStatement 객체 생성 4. 쿼리문 값 세팅
-> 쿼리문을 가지고 PreparedStatement 객체를 생성하고 삭제할 쿼리문 값을 세팅한다.
-> DELETE FROM emp WHERE empno = 1111 ); (기본 쿼리문)
-> emp 테이블의 사원번호가 1111인 사원을 삭제한다.
-> 데이터가 변경되서 실행되야 할 때는 물음표로 배치해야 한다!!(자바에서 데이터가 발생하게 됨)
-> DELETE FROM emp WHERE empno = ? );
Connection con = null;
PreparedStatement pstmt = null;
// 3. preparedStatemnet 객체 생성(쿼리문 이용), 4. 쿼리문 값 세팅
String sql = "delete from emp where empno = ?";
pstmt = con.prepareStatement(sql);
// ?가 있으면 셋팅해야함
pstmt.setInt(1, no);
5. 실행
- 쿼리문을 실행해 삭제된 레코드의 수를 반환한다.
-> cnt 변수를 만들어서 cnt에 0이 있으면 레코드 실패, cnt에 1이 있으면 레코드 성공
-> exceuteUpdate( )를 사용해 업데이트의 값이 있는지 확인한다.
ExecuteQuery | ExecuteUpdate |
수행결과로 ResultSet 객체의 값을 반환 | 수행결과로 Int 타입의 값을 반환 |
SELECT 구문을 수행할 때 사용되는 함수 |
SELECT 구문을 제외한 다른 구문을 수행할 때 사용되는 함수 |
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println(cnt + "개의 레코드가 삭제되었습니다.");
} else {
System.out.println("레코드 삭제 실패하였습니다.");
}
6. PreparedStatement 객체 Close, Connection 객체 Close
} catch (Exception e) {
e.printStackTrace();
} finally { // 수정이 되던 안되던 닫아줘야 한다.
try {
if(pstmt != null) pstmt.close();
if(con != null) con.close();
} catch (Exception e1) { }
}
7. 마지막으로 main 메서드에서 이 UpdateTest 생성자를 사용해서 start메서드 호출!
public class DeleteTest {
public DeleteTest( ) {
}
public void start( ) {
// DB연동코드
}
public static void main(String[] args) {
new DeleteTest().start();
}
}
<실행결과>
-> DeleteTest가 제대로 실행되면 레코드가 추가되고, SelectTest 문으로 가서 실행시켜보면 수정된 것을 확인해볼 수 있다. (lee가 없어짐!!)
<전체코드>
import java.sql.*;
import java.util.Scanner;
public class DeleteTest {
Scanner scan = new Scanner(System.in);
Connection con = null;
PreparedStatement pstmt = null;
public DeleteTest() {
}
public void start() {
try {
// 사원번호를 입력받아 입력받은 사원을 삭제하라.
System.out.print("삭제할 사원 번호 -> ");
int no = Integer.parseInt(scan.nextLine());
// 1. 드라이브로딩
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. db연결
con = DriverManager.getConnection("jdbc:mysql://localhost/demo", "root", "root1106");
// 3, 4 쿼리문을 가지고 PreparedStatement 객체생성하고 쿼리문 값 셋팅
String sql = "delete from emp where empno = ?";
pstmt = con.prepareStatement(sql);
// ?가 있으면 셋팅해야함
pstmt.setInt(1, no);
// 5. 실행: 삭제한 레코드의 수를 리턴해준다.
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println(cnt + "개의 레코드가 삭제되었습니다.");
} else {
System.out.println("레코드 삭제 실패하였습니다."); // 해당 레코드가 없을 수도 있기 때문에 오류 아님
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try { // 6. dbclose 삭제가 되던 안되던 닫아줘야 한다.
if(pstmt !=null) pstmt.close();
if(con != null) con.close();
} catch (Exception e) { }
}
}
public static void main(String[] args) {
new DeleteTest().start();
}
}
-> try-catch구문을 한 번만 생성해서 모든 예외를 예외처리 해주었다.
-> try-catch구문을 사용하지 않는다면 예외선언을 해주면 된다.
'멀티캠퍼스 풀스택 과정 > 데이터베이스' 카테고리의 다른 글
데이터베이스3-1 테이블의 생성, 복사, 삭제 (0) | 2022.01.19 |
---|---|
데이터베이스2-6 트랜잭션, SAVEPOINT와 ROLLBACK TO (0) | 2022.01.19 |
데이터베이스2-4 JDBC로 JAVA와 DB의 연동(UPDATE문) (0) | 2022.01.19 |
데이터베이스2-3 JDBC로 JAVA와 DB의 연동(INSERT문) (0) | 2022.01.19 |
데이터베이스2-2 데이터의 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) (0) | 2022.01.19 |