Skip to content

Latest commit

ย 

History

History
675 lines (433 loc) ยท 18.5 KB

TIL_221118.md

File metadata and controls

675 lines (433 loc) ยท 18.5 KB

โค๏ธโ€๐Ÿ”ฅ TIL DAY 09 โค๏ธโ€๐Ÿ”ฅ

๐Ÿ“† 2022๋…„ 11์›” 18์ผ ๊ธˆ์š”์ผ




์–ด์ œ ์ƒˆ๋ฒฝ 4์‹œ ๋„˜์–ด์„œ๊นŒ์ง€ ๋ชป์žค๋‹ค...
Java main class not Found Error ๋•Œ๋ฌธ์—..
ํ”ผ๊ณคํ•ด์„œ ์ฃฝ์„๊ฑฐ๊ฐ™์• ...
์›๋ž˜ ์ ์‹ฌ์ฏค์ด๋ฉด ๋ชป์žค์–ด๋„ ์ข€ ์Œฉ์Œฉํ•ด์ง€๋Š”๋ฐ...
DB ๋ถ€๋ถ„ ๋ชป๋”ฐ๋ผ๊ฐ€์„œ ์ˆ˜์—… ๋‚ด์šฉ๋„ ๋ชป์•Œ์•„๋“ฃ๊ฒ ์Œ..
์ฃผ๋ง๋™์•ˆ Java๋ž‘ DB ๋ถ€๋ถ„ ๋นก๊ณตํ•ด์•ผํ•จ ใ…œใ…œ ๐Ÿ˜ญ๐Ÿ˜ญ




๐Ÿ’ก JDBC

DB ์—ฐ๊ฒฐ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก Java์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
JDBC: Java Database Connectivity


โ“ DriverManager

  • JDBC Driver๋ฅผ ๊ด€๋ฆฌ
  • DB์™€ ์—ฐ๊ฒฐํ•ด์„œ Connection ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

โ“ Connection

  • Statement, PreparedStatement, CallableStatement ๊ตฌํ˜„๊ฐ์ฒด ์ƒ์„ฑ
  • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐ DB ์—ฐ๊ฒฐ์„ ๋Š์„ ๋•Œ ์‚ฌ์šฉ

โ“ Statement

  • SQL์˜ DDL๊ณผ DML์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ
    • DDL: Data Definition Language
    • DML: Data Manipulation Language
  • ์ฃผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ •์  SQL๋ฌธ์„ ์‹คํ–‰ํ•  ๋–„ ์‚ฌ์šฉ

โ“ PreparedStatement

  • Statement์™€ ๋™์ผํ•˜๊ฒŒ SQL์˜ DDL๊ณผ DML ๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ
  • ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ SQL๋ฌธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ํŽธ๋ฆฌ์„ฑ๊ณผ ๋ณด์•ˆ์„ฑ์ด ์ข‹์Œ
  • Statement ๋ณด๋‹ค ์ฃผ๋กœ ์‚ฌ์šฉ๋จ

โ“ CallableStatement

  • DB์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ”„๋กœ์‹œ์ €(procuder)์™€ ํ•จ์ˆ˜(function)์„ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ

โ“ ResultSet

  • DB์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ



๐Ÿ’ก DB ์—ฐ๊ฒฐ


๐Ÿ“ JDBC Driver ๋กœ๋”ฉ

ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ DB์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ž‘์—…

Class.forName("com.mysql.cj.jdbc.Driver");
  • Class.forName() ๋ฉ”์†Œ๋“œ๋Š” ๋ฌธ์ž์—ด๋กœ ์ฃผ์–ด์ง„ JDBC Driver ํด๋ž˜์Šค๋ฅผ Build Path์—์„œ ์ฐพ๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋กœ๋”ฉํ•จ
  • ์ด ๊ณผ์ •์—์„œ JDBC Driver ํด๋ž˜์Šค์˜ static ๋ธ”๋ก์ด ์‹คํ–‰๋จ
  • DriverManager์—ใ…” JDBC Driver ๊ฐ์ฒด๊ฐ€ ๋“ฑ๋ก๋จ
  • Build Path์—์„œ JDBC Driver ํด๋ž˜์Šค๋ฅผ ๋ชป์ฐพ์œผ๋ฉด ClassNotFoundException ๋ฐœ์ƒ
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์•ผํ•จ

Connection conn = DriverManager.getConnection("์—ฐ๊ฒฐ ๋ฌธ์ž์—ด", "์‚ฌ์šฉ์ž", "๋น„๋ฐ€๋ฒˆํ˜ธ");
  • DriverManager์— JDBC Driver๊ฐ€ ๋“ฑ๋ก๋˜๋ฉด getConnection() ๋ฉ”์†Œ๋“œ๋กœ DB์™€ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ

jdbc:mysql://localhost:3306/'DB(Database)์ด๋ฆ„'
  • MySQL์˜ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด
  • localhost : ๋กœ์ปฌ์— ์„ค์น˜๋œ MySQL์— ์—ฐ๊ฒฐํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
  • 3306 : Port ๋ฒˆํ˜ธ
  • ๋งˆ์ง€๋ง‰์—” DB ์ด๋ฆ„์„ ๊ธฐ์ž…

์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•˜๋ฉด getConnection() ๋ฉ”์†Œ๋“œ๋Š” Connection ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด ์—ฐ๊ฒฐ์ด ์‹คํŒจํ•˜๋ฉด SQLException์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•จ


๐Ÿ”— DB Connection Example




๐Ÿ’ก ๋ฐ์ดํ„ฐ ์ €์žฅ

JDBC๋ฅผ ์ด์šฉํ•ด์„œ INSERT๋ฌธ ์‹คํ–‰
SQL๋ฌธ์ด INSERT, UPDATE, DELETE ์ผ ๊ฒฝ์šฐ, executeUpdate() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ


๐Ÿ“ users ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” INSERT๋ฌธ

INSERT INTO users (userID, userName, userPassword, userAge, userEmail)
VALUES ('winter', 'ํ•œ๊ฒจ์šธ', '12345', '25', 'winter@mycompany.com')

  • 1๏ธโƒฃ ๊ฐ’์„ ?(๋ฌผ์Œํ‘œ)๋กœ ๋Œ€์ฒดํ•ด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”

    INSERT INTO users (userID, userName, userPassword, userAge, userEmail)
    VALUES (?, ?, ?, ?, ?)
    

  • 2๏ธโƒฃ INSERT๋ฌธ์„ String ํƒ€์ž… ๋ณ€์ˆ˜ sql ์— ๋ฌธ์ž์—ด๋กœ ๋Œ€์ž…

    String sql = new StringBuilder()
      .append("INSERT INTO users (userID, userName, userPassword, userEmail) ")
      .append("VALUES (?, ?, ?, ?, ?)")
      .toString();
    
    OR
    
    String sql = "" +
      "INSERT INTO users (userID, userName, userPassword, userEmail) " +
      "VALUES (?, ?, ?, ?, ?)";
    

  • 3๏ธโƒฃ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด PreparedStatement ๊ฐ€ ํ•„์š”ํ•จ

    PreparedStatement pstmt = conn.prepareStatement(sql);
    
    • Connection์˜ prepareStatement() ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ PreparedStatement๋ฅผ ์–ป๊ธฐ

  • 4๏ธโƒฃ ? ์— ๋“ค์–ด๊ฐˆ ๊ฐ’ ์ง€์ •

    pstmt.setString(1, "winter");
    pstmt.setString(2, "ํ•œ๊ฒจ์šธ");
    pstmt.setString(3, "12345");
    pstmt.setString(4, 25);
    pstmt.setString(5, "winter@mycompany.com");
    
    • ? ๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ 1๋ฒˆ๋ถ€ํ„ฐ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ€์—ฌ๋จ
    • ๊ฐ’์˜ ํƒ€์ž…์— ๋”ฐ๋ผ Setter ๋ฉ”์†Œ๋“œ ์„ ํƒ
    • ์ฒซ ๋ฒˆ์งธ์—๋Š” ?์˜ ์ˆœ๋ฒˆ, ๋‘ ๋ฒˆ์งธ์—๋Š” ๊ฐ’์„ ์ง€์ •

  • 5๏ธโƒฃ ๊ฐ’์„ ์ง€์ •ํ•œ ํ›„ executeUpdate() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

    int rows = pstmt.executeUpdate();
    
    • SQL๋ฌธ์ด ์‹คํ–‰๋˜๋ฉด์„œ users ํ…Œ์ด๋ธ”์— 1๊ฐœ์˜ ํ–‰์ด ์ €์žฅ๋จ
    • executeUpdate() ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์€ ์ €์žฅ๋œ ํ–‰ ์ˆ˜
      • ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์„ ๊ฒฝ์šฐ 1์„ ๋ฆฌํ„ด

  • 6๏ธโƒฃ close() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

    pstmt.close();
    
    • PreparedStatement๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

๐Ÿ”— UserInsertExample


userํ…Œ์ด๋ธ”_์ ์šฉ์‚ฌ์ง„_MySQL




๐Ÿ“ boards ํ…Œ์ด๋ธ”์— ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” INSERT๋ฌธ

INSERT INTO boards (btitle, bcontent, bwriter, bdate, bfilename, bfiledata)
VALUES ('๋ˆˆ ์˜ค๋Š” ๋‚ ', 'ํ•จ๋ฐ•๋ˆˆ์ด ๋‚ด๋ ค์š”', 'winter', now(), 'snow.jpg', binaryData)
  • bno๋Š” ์ž๋™ ์ฆ๊ฐ€ ์ปฌ๋Ÿผ์ด๋ฏ€๋กœ ์ƒ๋žต
  • now()๋Š” ํ˜„์žฌ ์‹œ๊ฐ„

  • 1๏ธโƒฃ now()๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ?๋กœ ๋Œ€์ฒด์‹œ์ผœ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ์‹œํ‚ค๊ณ  String ํƒ€์ž… ๋ณ€์ˆ˜ sql ์— ์ €์žฅ

    String sql = "" +
      "INSERT INTO boards (btitle, bcontent, bwriter, bdate, bfilename, bfiledata) " +
      "VALUES (?, ?, ?, now(), ?, ?)";
    

  • 2๏ธโƒฃ PreparedStatement ์–ป๊ธฐ

    PreparedStatement pstmt = conn.prepareStatement(sql,
                              Statement.RETURN_GENERATED_KEYS);
    
    • ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๊ฐ’์€ INSERT ๋ฌธ์ด ์‹คํ–‰๋œ ํ›„ ๊ฐ€์ ธ์˜ฌ ํ‚ค ๊ฐ’
      • ์ž๋™ ์ฆ๊ฐ€๋œ bno๊ฐ’์„ ๊ฐ€์ ธ์˜ด
      • SQL๋ฌธ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์—๋Š” bno ๊ฐ’์„ ๋ชจ๋ฆ„
      • SQL๋ฌธ์ด ์‹คํ–‰๋œ ํ›„์— bno ์ปฌ๋Ÿผ์— ์‹ค์ œ๋กœ ์ €์žฅ๋œ ๊ฐ’์„ ์–ป๋Š” ๊ฒƒ

  • 3๏ธโƒฃ ? ๊ฐ’ ์ง€์ •

    pstmt.setString(1, "๋ˆˆ ์˜ค๋Š” ๋‚ ");
    pstmt.setString(2, "ํ•จ๋ฐ•๋ˆˆ์ด ๋‚ด๋ ค์š”.");
    pstmt.setString(3, "winter");
    pstmt.setString(4, "snow.jpeg");
    pstmt.setBlob(5, new FileInputStream("๋ˆˆ ์‚ฌ์ง„ ๊ฒฝ๋กœ"));
    
    • bfiledata ์ปฌ๋Ÿผ์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒ€์ž…(blob)์ž„
      • setBinaryStream(), setBlob(), setBytes() ๋ฉ”์†Œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ด์šฉ

  • 4๏ธโƒฃ INSERT ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ์ €์žฅ๋œ bno ๊ฐ’์„ ์–ป๋Š” ๋ฐฉ๋ฒ•

    int rows = pstmt.executeUpdate();              // SQL๋ฌธ ์‹คํ–‰
     if(rows == 1) {
     ResultSet rs = pstmt.getGeneratedKeys();      // new String[] { "bno" }์— ๊ธฐ์ˆ ๋œ ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด
    
     if(rs.next()) {                               // ๊ฐ’์ด ์žˆ๋‹ค๋ฉด
       int bno = rs.getInt(1);                     // new String[] { "bno" }์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ bno์˜ ์ปฌ๋Ÿผ ๊ฐ’์„ ์ฝ์Œ
     }
    rs.close();                                    // ResultSet์ด ์‚ฌ์šฉํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
    }
    

๐Ÿ”— BoardInsertExample


boardsํ…Œ์ด๋ธ”_์ ์šฉ์‚ฌ์ง„_1_MySQL boardsํ…Œ์ด๋ธ”_์ ์šฉ์‚ฌ์ง„_2_MySQL




๐Ÿ’ก ๋ฐ์ดํ„ฐ ์ˆ˜์ •


๐Ÿ“ boards ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ˆ˜์ •

# bno๊ฐ€ 2์ธ ๊ฒŒ์‹œ๋ฌผ์˜ btitle, bcontent, bfiledata๋ฅผ ๋ณ€๊ฒฝ
UPDATE boards SET
  btitle='๋ˆˆ์‚ฌ๋žŒ',
  bcontent='๋ˆˆ์œผ๋กœ ๋งŒ๋“  ์‚ฌ๋žŒ',
  bfilename='snowman.jpeg',
  bfiledata=binaryData
WHERE bno=2

  • 1๏ธโƒฃ ๊ฐ’์„ ? ๋กœ ๋Œ€์ฒดํ•ด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”

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

  • 2๏ธโƒฃ sql ์— ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ UPDATE๋ฌธ ์ €์žฅ

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

  • 3๏ธโƒฃ PreparedStatement ์–ป๊ธฐ

    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, "๋ˆˆ์‚ฌ๋žŒ");
    pstmt.setString(2, "๋ˆˆ์œผ๋กœ ๋งŒ๋“  ์‚ฌ๋žŒ");
    pstmt.setString(3, "snowman.jpeg");
    pstmt.setBlob(4, new FileInputStream("ํŒŒ์ผ ์ €์žฅ ๊ฒฝ๋กœ"));
    pstmt.setInt(5, 2);
    

  • 4๏ธโƒฃ UPDATE ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด executeUpdate() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

    int rows = pstmt.executeUpdate();
    

๐Ÿ”— BoardUpdateExample


boardsํ…Œ์ด๋ธ”_์ˆ˜์ •_์ ์šฉ์‚ฌ์ง„_1 boardsํ…Œ์ด๋ธ”_์ˆ˜์ •_์ ์šฉ์‚ฌ์ง„_2




๐Ÿ’ก ๋ฐ์ดํ„ฐ ์‚ญ์ œ


๐Ÿ“ boards ํ…Œ์ด๋ธ”์— bwriter๊ฐ€ snow์ธ ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ

DELETE FROM boards WHERE bwriter='snow'

  • 1๏ธโƒฃ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ DELETE ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝ

    DELETE FROM boards WHERE bwriter=?
    

  • 2๏ธโƒฃ DELETE ๋ฌธ์„ sql ์— ๋Œ€์ž…

    String sql = "DELETE FROM boards WHERE bwriter=?";
    

  • 3๏ธโƒฃ PreparedStatement ๋ฅผ ์–ป๊ณ  ๊ฐ’์— ? ์ง€์ • ํ›„ SQL ๋ฌธ ์‹คํ–‰

    String sql = "DELETE FROM boards WHERE bwriter=?";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, "snow");
    int rows = pstmt.executeUpdate();
    
    • ๋ฆฌํ„ด๊ฐ’ : ์‚ญ์ œ๋œ ํ–‰ ์ˆ˜

๐Ÿ”— BoardDeleteExample.java


boardsํ…Œ์ด๋ธ”_์‚ญ์ œ_์ ์šฉ์‚ฌ์ง„




๐Ÿ’ก ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” SELECT ๋ฌธ์ผ ๊ฒฝ์šฐ, executeQuery() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

ResultSet rs = pstmt.executeQuery();

๐Ÿ“ ResultSet

SELECT๋ฌธ์— ๊ธฐ์ˆ ๋œ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ–‰์˜ ์ง‘ํ•ฉ

SELECT userid, username, userage FROM users
  • ์ปค์„œ๊ฐ€ ์žˆ๋Š” ํ–‰์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
    • ์ปค์„œ : ํ–‰์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

  • ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ํ–‰์˜ ์•ž๋’ค๋กœ beforeFirst์™€ afterLast ํ–‰์ด ๋ถ™์Œ

    • ์ตœ์ดˆ ์ปค์„œ๋Š” beforeFirst๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํ–‰์ธ first ํ–‰์„ ์ฝ์œผ๋ ค๋ฉด ์ปค์„œ๋ฅผ ์ด๋™์‹œ์ผœ์•ผ ํ•จ

  • next() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

    boolean result = rs.next();
    
    • next() ๋ฉ”์†Œ๋“œ๋Š” ์ปค์„œ๋ฅผ ๋‹ค์Œ ํ–‰์œผ๋กœ ์ด๋™์‹œํ‚ด
  • ์ด๋™ํ•œ ํ–‰์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด true๋ฅผ ๋ฆฌํ„ด

  • ์ด๋™ํ•œ ํ–‰์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด false๋ฅผ ๋ฆฌํ„ด


  • โ“ SELECT ๋ฌธ์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ
    • beforeFirst ํ–‰๊ณผ afterLast ํ–‰์ด ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—
      ์ฒซ ๋ฒˆ์งธ next() ๊ฒฐ๊ณผ๋Š” false

  • โ“ 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ–‰๋งŒ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ

    ResultSet rs = pstmt.executeQuery();
    if(rs,next()) {
      //์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํ–‰ ์ฒ˜๋ฆฌ
    } else {
      //afterLast ํ–‰์œผ๋กœ ์ด๋™ํ–ˆ์„ ๊ฒฝ์šฐ
    }
    
    • if ์กฐ๊ฑด์‹์—์„œ next() ๋ฉ”์†Œ๋“œ๋ฅผ 1๋ฒˆ ํ˜ธ์ถœ
    • ์ฃผ๋กœ SELECT ๋ฌธ์ด ๊ธฐ๋ณธํ‚ค(Primary Key)๋ฅผ ์กฐ๊ฑด์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ

  • โ“ n๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ–‰์„ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ

    ResultSet rs = pstmt.executeQuery();
    while(rs.next()) {
      //last ํ–‰๊นŒ์ง€ ์ด๋™ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ํ–‰ ์ฒ˜๋ฆฌ
    }
      //afterLast ํ–‰์œผ๋กœ ์ป๋™ํ–ˆ์„ ๊ฒฝ์šฐ
    
    • while ๋ฌธ์„ ์ด์šฉํ•ด์„œ next() ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœ

    • true๊ฐ€ ๋ฆฌํ„ด๋  ๋™์•ˆ(last ํ–‰๊นŒ์ง€ ์ด๋™ํ•  ๋•Œ๊นŒ์ง€) ๋ฐ์ดํ„ฐ ํ–‰์„ ์ฒ˜๋ฆฌ

    • false๊ฐ€ ๋ฆฌํ„ด๋˜๋ฉด(afterLast ํ–‰์œผ๋กœ ์ด๋™ํ•  ๋–„) ๋ฐ˜๋ณต์„ ์ข…๋ฃŒ

    • ResultSet์˜ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

      rs.close();
      
      • close() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
      • ๋งŽ์€ ๋ฐ์ดํ„ฐ ํ–‰์ด ์ €์žฅ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ



๐Ÿ“ ๋ฐ์ดํ„ฐ ํ–‰ ์ฝ๊ธฐ

Getter ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

  • ResultSet ์—์„œ ์ปฌ๋Ÿผ ์ˆœ๋ฒˆ์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘
    • userid = 1, username = 2, userage = 3

  • โœ”๏ธ ์ปฌ๋Ÿผ ์ด๋ฆ„์œผ๋กœ ์ฝ๊ธฐ

    String userid =
      rs.getString("userid");
    String userName =
      rs.getString("username");
    int userAge = rs.getInt("userage");
    

  • โœ”๏ธ ์ปฌ๋Ÿผ ์ˆœ๋ฒˆ์œผ๋กœ ์ฝ๊ธฐ

    String userid = rs.getString(1);
    String userName = rs.getString(2);
    String userAge = rs.getInt(3);
    

  • SELECT ๋ฌธ์— ์—ฐ์‚ฐ์‹์ด๋‚˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ํฌํ•จ๋˜์–ด์žˆ๋‹ค๋ฉด ์ˆœ๋ฒˆ์œผ๋กœ ์ฝ์–ด์•ผ ํ•จ

    SELECT userid, userage -1
    FROM users
    
    String userId =
      rs.getString("userid");
    int userAge = rs.getInt(2);
    



๐Ÿ“ ์‚ฌ์šฉ์ž ์ •๋ณด ์ฝ๊ธฐ


๐Ÿ”Ž users ํ…Œ์ด๋ธ”์—์„œ userid๊ฐ€ winter์ธ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ์ถœ๋ ฅ



  • 2๏ธโƒฃ userid๊ฐ€ winter์ธ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” SELECT ๋ฌธ

    SELECT userid, username, userpassword, userage, useremail
    FROM users
    WHERE userid='winter';
    

  • 3๏ธโƒฃ ์กฐ๊ฑด์ ˆ์˜ ๊ฐ’์„ ? ๋กœ ๋Œ€์ฒดํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ SQL๋ฌธ์„ sql ์— ๋Œ€์ž…

    String sql = "" +
      "SELECT userid, username, userpassword, userage, useremail " +
      "FROM users " +
      "WHERE userid=?";
    

  • 4๏ธโƒฃ PreparedStatement๋ฅผ ์–ป๊ณ  ? ์— ๊ฐ’์„ ์ง€์ •

    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, "winter");
    

  • 5๏ธโƒฃ executeQuery() ๋ฉ”์†Œ๋“œ๋กœ SELECT ๋ฌธ์„ ์‹คํ–‰ํ•ด 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("์‚ฌ์šฉ์ž ์•„์ด๋””๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ");
    }
    
    • userid : ๊ธฐ๋ณธํ‚ค(Primary key)
      • ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์€ 1๊ฐœ์ด๊ฑฐ๋‚˜ 0๊ฐœ
    • if ๋ฌธ์„ ์ด์šฉ
      • next() ๋ฉ”์†Œ๋“œ๊ฐ€ true๋ฅผ ๋ฆฌํ„ดํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ํ–‰์„ User ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ณ  ์ถœ๋ ฅ
    • System.out.println(user)๋Š” ๋กฌ๋ณต์ด ์ƒ์„ฑํ•œ User์˜ toString() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฐ›์€ ๋ฆฌํ„ด๊ฐ’์„ ์ถœ๋ ฅ

๐Ÿ”— UserSelectExample




๐Ÿ“ ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด ์ฝ๊ธฐ


๐Ÿ”Ž boards ํ…Œ์ด๋ธ”์—์„œ bwriter๊ฐ€ winter์ธ ๊ฒŒ์‹œ๋ฌผ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ


  • BoardInsertExample ์˜ˆ์ œ๋ฅผ ์ด์šฉํ•ด
    boards ํ…Œ์ด๋ธ”์— bwriter๋ฅผ winter๋กœ ํ•˜๋Š” ๊ฒŒ์‹œ๋ฌผ์„ 2๊ฐœ ์ด์ƒ ์ €์žฅ

EX02_BoardInsert


  • 1๏ธโƒฃ Board ํด๋ž˜์Šค ์ž‘์„ฑ
    • boards ํ…Œ์ด๋ธ”์˜ 1๊ฐœ ํ–‰(๊ฒŒ์‹œ๋ฌผ)์„ ์ €์žฅํ•  ์šฉ๋„
    • ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜์™€ ํƒ€์ž…์— ๋งž๊ฒŒ ํ•„๋“œ ์„ ์–ธ
    • ๋กฌ๋ณต @Data ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ(Getter, Setter, toString)
    • ๐Ÿ”— Board

  • 2๏ธโƒฃ bwriter๊ฐ€ winter์ธ ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” SELECT ๋ฌธ

    SELECT bno, btitle, bcontent, bwriter, bdate, bfilename, bfiledata
    FROM boards
    WHERE bwriter='winter';
    

  • 3๏ธโƒฃ ์กฐ๊ฑด์ ˆ์˜ ๊ฐ’์„ ? ๋กœ ๋Œ€์ฒดํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ SELECT ๋ฌธ์„ sql ์— ๋Œ€์ž…

    String sql = "" +
      "SELECT bno, btitle, bcontent, bwriter, bdate, bfilename, bfiledata " +
      "FROM boards " +
      "WHERE bwriter=?";
    

  • 4๏ธโƒฃ PreparedStatement๋ฅผ ์–ป๊ณ  ? ์— ๊ฐ’์„ ์ง€์ •

    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, "winter");
    

  • 5๏ธโƒฃ executeQuery() ๋ฉ”์†Œ๋“œ๋กœ SELECT ๋ฌธ์„ ์‹คํ–‰ ํ›„ 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("bfiledate"));
    
      //์ฝ˜์†”์— ์ถœ๋ ฅ
      System.out.println(board);
    }
    
    • ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์€ n๊ฐœ
    • while ๋ฌธ์„ ์ด์šฉํ•ด์„œ next() ๋ฉ”์†Œ๋“œ๊ฐ€ false๋ฅผ ๋ฆฌํ„ดํ•  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
    • ๋‚˜์˜จ ๊ฐ’์„ Board ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ณ  ์ถœ๋ ฅ
    • System.out.println(board)๋Š” ๋กฌ๋ณต์ด ์ƒ์„ฑํ•œ Board์˜ toString() ์˜ ๋ฆฌํ„ด๊ฐ’์„ ์ถœ๋ ฅ

  • 6๏ธโƒฃ Blob ๊ฐ์ฒด์— ์ €์žฅ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ

    # ์ŠคํŠธ๋ฆผ ์–ป๊ธฐ
    Blob blob = board.getBfiledata();
    InputStream is =
      blob.getBinaryStream();
    
    # ๋ฐฐ์—ด ์–ป๊ธฐ
    Blob blob = Board.getBfiledata();
    byte[] bytes = blob.getBytess(0, blob.length());
    

  • 7๏ธโƒฃ Blob ๊ฐ์ฒด์—์„œ InputStream์„ ์–ป๊ณ  ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ

    InputStream is = blob.getBinaryStream();
    OutputStream os = new FileOutputStream("/Users/NOSTALJIAN/Downloads/" + board.getBfilename());
    is.transferTo(os);
    os.flush();
    os.close();
    is.close();
    

๐Ÿ”— BoardSelectExample


bwrtier_winter_select_์ ์šฉ์‚ฌ์ง„_1 bwriter_winter_select_์ ์šฉ์‚ฌ์ง„_2 bwriter_winter_select_์ ์šฉ์‚ฌ์ง„_3