본문 바로가기
[DBMS]/- Oracle

[Oracle]delete기초

by Hapco 2022. 5. 31.
728x90
반응형

insert 방식으로 delete 구문을 실행 했을때의 문제점은 없을까?

예시 코드를보자

public static void main(String[] args) throws ClassNotFoundException, SQLException {
	Scanner sc= new Scanner(System.in);
	System.out.println("삭제하실 상품의 번호를 입력해주세요");
	int num =sc.nextInt();
	sc.close();
		
	Class.forName("oracle.jdbc.OracleDriver");
	Connection con= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "kh", "kh");
		
	String sql ="delete product where (no=?)";
		
	PreparedStatement ps = con.prepareStatement(sql);
	ps.setInt(1, num);
		
	ps.execute();
	con.close();
	System.out.println("삭제가 완료되었습니다");

위 코드의 문제점으로 보면 없는 데이터도 삭제가 된다

삭제가 되었다면

1개의 행이(가) 삭제되었습니다 라고나온다.

그러면 이러한 문제를 어떻게 해결해야하는가 ?

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

java.sql -> PreparedStatement 에가면 execute() api를 볼수잇다

아래보면 excuteUpdate()는 반환형이 int 형이다.

그래서 사용 법을 보자면

		//입력
	int no = 10;
	Class.forName("oracle.jdbc.OracleDriver");
	Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "kh", "kh");
		
	String sql = "delete product where no=?";
		
	PreparedStatement ps = con.prepareStatement(sql);
		
	ps.setInt(1, no);
		
	//ps.execute(); //해당명령으로는 삭제가 성공햇는지 실패햇는지 파악할수 없다.
	int count = ps.executeUpdate(); //해당명령은 실행후 적용된 행 개수를 반환한다
		
		
		
	con.close();
	System.out.println("count="+count);
	 if(count>0) {
	  System.out.println("삭제완료");
	 }else {
	 System.out.println("해당하는 상품이 존재하지 않습니다.");
	 }
	}

}

ps.execute -> ps.excuteUpdate 로 변경해주면 된다

그후 조건을걸어 삭제 유무를 판단해준다

'[DBMS] > - Oracle' 카테고리의 다른 글

[Oracle]Select  (0) 2022.05.31
[Oracle]update  (0) 2022.05.31
[Oracle]Insert 기초  (0) 2022.05.31
[Oracle]DML/DCL/DDL  (0) 2022.05.30
[Oracle]이클립스에서 디비연결 / JDBC  (0) 2022.05.30

댓글