TIL #29 - 데이터베이스 Update
레코드 수정이다.
수정 역시 드라이버 로딩 후 접속, 그런 후 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();
}
}