-
TIL #29 - 데이터베이스 Update프로그래밍/TIL(국비과정) 2020. 5. 13. 15:43
레코드 수정이다.
수정 역시 드라이버 로딩 후 접속, 그런 후 update(수정) 해준다.
아래의 코드에서는 수정할 이름을 입력받으면 나이와 키를 1씩 증가 시킨다.
수정 sql 문장을 조금 헤메었다.
UpdateTest.java
package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner; public class UpdateTest { private String driver = "oracle.jdbc.driver.OracleDriver"; private String url = "jdbc:oracle:thin:@localhost:1521:xe"; private String username = "c##java"; private String password = "bit"; private Connection conn; private PreparedStatement pstmt;
필드값은 insert와 동일하다.
또 생성자에 드라이버를 로딩해주고 db에 접속해주는 것 역시 insert와 동일하다.
// 1. 설치 (설치는 생성자에) public UpdateTest() { try { Class.forName(driver); // System.out.println("드라이버 로딩 성공 "); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 2. 접속 public void getConnection() { try { conn = DriverManager.getConnection(url, username, password); // System.out.println("접속 성공"); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); // 끊어줄 땐 반대로 끊어주기 } catch (SQLException e) { e.printStackTrace(); } } }
접속 후 접속이 필요 없어지면 꺼지도록 꼭 close 해준다.
이제 레코드를 수정할 updateArticle() 이다.
먼저 수정할 레코드를 이름으로 찾는다.
public void updateArticle() { Scanner scan = new Scanner(System.in); System.out.print("수정할 이름을 입력하세요 :"); String name = scan.next();
이름을 입력받으면 db에 접속을 하고 사용할 sql 문을 넣어준다.
getConnection(); String sql = "update dbtest set age = age+1, height = height+1 where name like ?";
이름으로 찾기 때문에 where name like ? 이다.
물음표는 % 와 같이 먹히지 않기 때문에 단독으로 물음표만 써준다. (이 부분을 몰라서 헤맸다. )
또, 나이와 키를 1씩 더해주는 것도 위의 sql 문에 적어준다.
위의 sql문을 자바도 알아 들을 수 있게 가이드 역할을 해주는 prepareStatement 를 준다.
pstmt = conn.prepareStatement(sql);
그런 후 데이터를 주입한다.
pstmt.setString(1, "%" + name + "%");
물음표가 하나 있기 때문에 인덱스는 1이 되고, 검색한 이름(name)이 포함된 단어를 찾아야하기 때문에 앞 뒤로 %를 적어준다. 단, %를 적어줄 때는 큰따옴표를 표기한다.
위의 과정은 데이터를 update 해주기 때문에 (갱신 해주기) executeUpdate를 해준다.
executeUpdate를 해주지 않으면 위의 sql 문은 실행되지 않으므로 잊지 말고 꼭 적어준다.
그리고 그것을 su 변수에 넣어 행이 수정되었다는 메시지를 띄워준다.
int su = pstmt.executeUpdate(); System.out.println(su + "개의 행 수정 성공했습니다");
위의 과정은 전부 예외처리가 필요하므로 try로 묶어준다.
pstmt = conn.prepareStatement(sql); // 데이터 주입 pstmt.setString(1, "%" + name + "%"); int su = pstmt.executeUpdate(); System.out.println(su + "개의 행 수정 성공했습니다"); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (pstmt != null) pstmt.close(); if (conn != null) pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } }
pstmt와 conn 역시도 사용이 끝났다면 실행 순서와 반대로 꼭 close 해준다.
close 해주지 않으면 나중에 오라클이 뻗을 수 있다고 한다.
필요한 예외처리도 추가적으로 해준다.
public static void main(String[] args) { new UpdateTest().updateArticle(); } }
'프로그래밍 > TIL(국비과정)' 카테고리의 다른 글
TIL #31 - Servlet, 톰캣 (2) (0) 2020.05.26 TIL #30 - Servlet, 톰캣 (0) 2020.05.25 TIL #28 - 데이터베이스 Insert (0) 2020.05.11 TIL #27 - 채팅 프로그램 (2) 2020.05.06 TIL #26 - 서버와 클라이언트 (0) 2020.05.04