1. 데이터 수정
◎ 업데이트 문
1. JDBC를 사용하여 UPDATE 문을 실행합니다.
![]()
![]()
2. prepareStatement() 메서드에서 PreparedStatement를 검색하고 “?”와 같은 값을 할당합니다.
3. executeUpdate() 메서드를 호출합니다.
변경된 행 수를 반환합니다.
![]()
![]()
◎ UPDATE 문을 사용한 예
package java0213_1; 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("oracle.jdbc.OracleDriver"); // 연결하기 conn = DriverManager.getConnection( "jdbc:oracle:thin:@연결 주소:포트/SID", "오라클 ID", "오라클 PW" ); // 매개변수화된 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/java0213_1/snowman.jpg")); pstmt.setInt(5, 3); // 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이전에 실행한 BoardUpdateExample을 다시 실행하고 위의 코드를 실행하면 줄이 수정됩니다.
Oracle DB와 연동됩니다.
◎ DELETE 문
▷ JDBC를 이용하여 DELETE 문을 실행합니다.
문자열 유형의 변수 sql에 매개변수화된 DELETE 문을 할당합니다.
▷ PrepareStatement() 메서드에서 PreparedStatement를 가져온 후 ? 값이 할당되면 executeUpdate로 SQL 문을 실행합니다.
◎ DELETE 문을 사용한 예
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class BoardDeleteExample { public static void main(String() args) { Connection conn = null; try { // JDBC DRIVER 등록 Class.forName("oracle.jdbc.OracleDriver"); // 연결하기 conn = DriverManager.getConnection( "jdbc:oracle:thin:@연결 주소:포트/SID", "오라클 ID", "오라클 PW" ); // 매개변수화된 SQL문 작성 String sql = "DELETE FROM boards WHERE bwriter=?"; // PreparedStatement 얻기 및 값 지정 PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "winter"); // 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
생성된 줄에서 bwriter=”winter”가 있는 모든 줄을 삭제합니다.
아래와 같이 주소 부분을 별도로 변수로 제공해도 상관없습니다.
String url = "jdbc:oracle:thin:@연결 주소:포트/SID"; String user = "오라클 ID"; String passwd = "오라클 PW"; conn = DriverManager.getConnection(url, user, passwd);
◎ ResultSet 구조
▷ SELECT 문에 기술된 열로 구성된 행 집합
▷ 커서가 위치한 라인의 데이터만 읽을 수 있습니다.
▷ 커서를 next() 메서드로 이동하여 첫 번째 줄을 읽습니다.
◎ 데이터 행 읽기
▷ 커서가 있는 데이터 행의 각 컬럼 값을 getter 방식으로 읽어옵니다.
▷ SELECT 문에 연산식이나 함수 호출이 포함된 경우 컬럼 이름 대신 컬럼 번호를 읽어야 합니다.
◎ 데이터의 행 읽기 예
package ch20.oracle.sec09.ex01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserSelectExample { public static void main(String() args) { Connection conn = null; try { // JDBC DRIVER 등록 Class.forName("oracle.jdbc.OracleDriver"); // 연결하기1 // conn = DriverManager.getConnection( // "jdbc:oracle:thin:@연결 주소:포트/SID", // "오라클 ID", // "오라클 PW" // ); // 연결하기2 String url = "jdbc:oracle:thin:@연결 주소:포트/SID"; String user1 = "오라클 ID"; String passwd = "오라클 PW"; conn = DriverManager.getConnection(url, user1, passwd); // 매개변수화된 SQL문 작성 String sql = "" + "SELECT userid, username, userpassword, userage, useremail " + "FROM users " + "WHERE userid=?"; // PreparedStatement 얻기 및 값 지정 PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "winter"); // SQL문 실행 후, ResultSet을 통해 데이터 읽기 ResultSet rs = pstmt.executeQuery(); if(rs.next()) { User user = new User(); user.setUserId(rs.getString("userid")); user.setUserName(rs.getString("username")); user.setUserPassword(rs.getString("userpassword")); user.setUserAge(rs.getInt(4)); user.setUserEmail(rs.getString(5)); System.out.println(user); } else { System.out.println("사용자 아이디가 존재하지 않음"); } rs.close(); // PreparedStatement 닫기 pstmt.close(); } catch(Exception e) { e.printStackTrace(); } finally { if(conn !
= null) { try { // 연결 끊기 conn.close(); } catch (SQLException e) {} } } } } // 출력 : // User(userId=winter, userName=한겨울, userPassword=12345, userAge=25, [email protected])
Lombok에 대한 애플리케이션 예제: 이것은 Java(507p)
◎ 게시물 정보 읽기
1. 작성자가 Winter인 게시물의 정보를 boards 테이블에 가져옵니다.
![]()
2. 작성자가 Winter인 게시물에 대한 정보를 가져오는 SELECT 문. PrepareStatement() 메서드에서 PreparedStatement를 가져오고 ? 에 대한 값.
![]()
3. executeQuery() 메서드로 SELECT 문을 실행하여 ResultSet 가져오기
4. while 문을 사용하면 next() 메서드가 false를 반환하고 출력할 때까지 데이터 행이 Board 개체에 반복적으로 저장됩니다.
![]()
5. Blob 개체에 저장된 이진 데이터를 가져오기 위해 입력 스트림 또는 배열을 가져옵니다.
![]()
6. Blob 개체에서 InputStream 가져오기, 읽은 바이트를 파일에 저장
![]()
◎ 게시판 생성 예시
import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class BoardSelectExample { public static void main(String() args) { Connection conn = null; try { // JDBC Driver 등록 Class.forName("oracle.jdbc.OracleDriver"); // 연결하기 conn = DriverManager.getConnection( "jdbc:oracle:thin:@연결 주소:포트/SID", "오라클 ID", "오라클 PW" ); // 매개변수화된 SQL문 작성 String sql = ""+ "SELECT bno, btitle, bcontent, bwriter, bdate, bfilename, bfiledata " + "FROM boards " + "WHERE bwriter=?"; // PreparedStatement 얻기 및 값 지정 PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "winter"); // SQL문 실행 후, ResultSet을 통해 데이터 읽기 ResultSet rs = pstmt.executeQuery(); while(rs.next()) { // 데이터 행을 읽고 Board(); Board board = new Board(); board.setBno(rs.getInt("bno")); board.setBtitle(rs.getString("btitle")); board.setBcontent(rs.getString("bcontent")); board.setBwriter(rs.getString("bwriter")); board.setBdate(rs.getDate("bdate")); board.setBfilename(rs.getString("bfilename")); board.setBfiledata(rs.getBlob("bfiledata")); // 콘솔에 출력 System.out.println(board); // 파일로 저장 Blob blob = board.getBfiledata(); if(blob !
= null) { InputStream is = blob.getBinaryStream(); OutputStream os = new FileOutputStream("C:/Temp/"+ board.getBfilename()); is.transferTo(os); os.flush(); os.close(); is.close(); } } rs.close(); // PreparedStatement 닫기 pstmt.close(); } catch(Exception e) { e.printStackTrace(); } finally { if(conn !
= null) { try { // 연결 끊기 conn.close(); } catch (SQLException e) {} } } } } // 출력 : // Board(bno=10, btitle=크리스마스, bcontent=메리 크리스마스~, bwriter=winter, bdate=2023-02-14, bfilename=chrismas.jpg, bfiledata=oracle.sql.BLOB@5f049ea1) // Board(bno=8, btitle=봄의 정원, bcontent=정원의 꽃이 이쁘네요., bwriter=winter, bdate=2023-02-14, bfilename=spring.jpg, bfiledata=oracle.sql.BLOB@909217e) // Board(bno=9, btitle=눈오는 날, bcontent=함박눈이 내려요., bwriter=winter, bdate=2023-02-14, bfilename=snow.jpg, bfiledata=oracle.sql.BLOB@18271936)
UPDATE, DELETE 및 ResultSet을 사용하여 Java와 Oracle을 연결하는 예제를 수행했습니다.
MySQL에서 배운 문법과 비슷한 것도 있고 또 다른 것도 있어요!
!
문법이 달라서 헷갈리지 않게 잘 정리해야겠어요!
!
많은 분들의 피드백은 언제나 환영합니다!
댓글 많이 달아주세요~~