20.7 데이터 수정

이번 절에서는 JDBC를 이용해서 UPDATE 문을 실행하는 방법을 알아보자. boards 테이블에 저

장된 게시물 중에서 bno가 3인 게시물의 btitle, bcontent, bfilename, bfiledata를 변경하는

SQL 문은 다음과 같다.

UPDATE boards SET
  btitle = '눈사람',
  bcontent = '눈으로 만든 사람;,
  bfilename = 'snowman.jpg',
  bfiledata = binaryData 
WHERE bno = 3

값을 ?로 대체한 매개변수화된 UPDATE 문으로 변경한다.

UPDATE boards SET
  btitle = ?,
  bcontent = ?,
  bfilename = ?,
  bfiledata = ?
WHERE bno = ?

String 타입 변수 sql에 매개변수화된 UPDATE 문을 저장한다.

String sql = new StringBuilder() .append(“UPDATE boards SET “) .append(“btitle = ?, “) .append(“bcontent = ?, “) .append(“bfilename = ?, “) .append(“bfiledata = ? “) .append(“WHERE bno = ?”) .toString();

매개변수화된 UPDATE 문을 실행하기 위해 다음과 같이 prepareStatement ( ) 메소드로부터

PreparedStatement를 얻고, ?에 해당하는 값을 지정한다.

PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, “눈사람”); pstmt.setString(2, “눈으로 만든 사람”); pstmt.setString(3, “snowman.jpg”); pstmt.setBlob(4, new FileInputStream(“src/ch20/mysql/sec07/snowman.jpg”)); pstmt.setInt(5, 3);

값을 모두 지정하였다면 UPDATE 문을 실행하기 위해 executeUpdate ( ) 메소드를 호출한다. 성

공적으로 실행되면 수정된 행의 수가 리턴된다. 만약 0이 리턴되면 조건에 맞는 행이 없어 수정된

내용이 없음을 의미한다.

int rows = pstmt.executeUpdate();

다음은 boards 테이블에 저장된 게시물 정보를 수정하는 전체 코드이다. 39라인의 게시물 번호 3은

여러분의 boards 테이블에 저장된 번호로 알맞게 수정해야 한다.

»> BoardUpdateExample.java



package ch20.mysql.sec07;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BoardUpdateExample {
  public static void main(String[] args) {
    Connection conn  =  null;
    try {
      //JDBC Driver 등록
      Class.forName("com.mysql.cj.jdbc.Driver");

      //연결하기
      conn  =  DriverManager.getConnection(



     




        "jdbc:mysql://localhost:3306/thisisjava", 
        "java", 
        "mysql"

      );

      //매개변수화된 SQL 문 작성
      String sql  =  new StringBuilder()
          .append("UPDATE boards SET ")
          .append("btitle = ?, ")
          .append("bcontent = ?, ")
          .append("bfilename = ?, ")
          .append("bfiledata = ? ")
          .append("WHERE bno = ?")
          .toString();

      //PreparedStatement 얻기 및 값 지정
      PreparedStatement pstmt  =  conn.prepareStatement(sql);
      pstmt.setString(1, "눈사람");
      pstmt.setString(2, "눈으로 만든 사람");
      pstmt.setString(3, "snowman.jpg");
      pstmt.setBlob(4, new FileInputStream("src/ch20/mysql/sec07/snowman. jpg"));
      pstmt.setInt(5, 3);  //boards 테이블에 있는 게시물 번호(bno) 지정

      //SQL 문 실행
      int rows  =  pstmt.executeUpdate();
      System.out.println("수정된 행 수: " + rows);

      //PreparedStatement 닫기
      pstmt.close();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if(conn !=  null) {
        try { 
          //연결 끊기
          conn.close(); 
        } catch (SQLException e) {}

      }

    }



     
     
 
     
     



  }

}

실행 결과


수정된 행 수: 1

서브목차