๐Ÿ‘€ JDBC(Java Database Connectivity)๋ž€?

  • Java๋ž‘ DBMS๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” API
  • ์ฆ‰ ์ž๋ฐ”๋ž‘ DB๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œํ•  ๋•Œ SQL ํ”„๋กฌํ”„ํŠธ์—์„œ SQL๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์—์„œ SQL๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” API์ด๋‹ค.
  • JDBC๋Š” DBMS ์ข…๋ฅ˜์— ์ƒ๊ด€์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์—ฌ๋Ÿฌ ์–ธ์–ด์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ „๋ฐ˜์ ์œผ๋กœ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

JDBC ๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜

  • mysql ํ™ˆํŽ˜์ด์ง€์—์„œ Connect J๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.(ํ˜„์žฌ ์ตœ์‹ ๋ฒ„์ „์ธ 8.0.28)
  • ์œˆ๋„์šฐ๋ผ๋ฉด .zip ํŒŒ์ผ์„ ๋ฐ›์œผ๋ฉด ๋˜๊ณ  ๋งฅ์ด๋ผ๋ฉด .tar ํŒŒ์ผ์„ ๋ฐ›๋Š”๋‹ค.
  • ์••์ถ•์„ ํ’€๋ฉด mysql-connector-java-8.0.28.jar๋ž€ ํŒŒ์ผ์ด ์žˆ๋‹ค.
  • ์ €๊ฑธ JDBC๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” (์ดํด๋ฆฝ์Šค)ํ”„๋กœ์ ํŠธ์˜ WEB-INF/lib ํด๋”์— ๋„ฃ๋Š”๋‹ค.(๊ฒฝ๋กœ ๋‹ค๋ฅด๋ฉด ์•ˆ ๋จ!! ๋ฌด์กฐ๊ฑด ์ €๊ธฐ์— ๋„ฃ์–ด์•ผ ํ•จ)
  • ๊ทธ๋Ÿฌ๋ฉด ์„ค์น˜ ๋!

JDBC ์—ฐ๋™

1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ(ํ•˜๋“œ๋””์Šคํฌ์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ)

  • ์•„๊นŒ ์„ค์น˜ํ•œ JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒƒ์ด๋‹ค.
    Class.forName("com.mysql.cj.jdbc.Driver"); // static method๋ผ์„œ ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ๋ฐ”๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ
    
  • ์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • MySQL ํ™ˆํŽ˜์ด์ง€ ๊ฐ€์„œ Documentation ํŽ˜์ด์ง€ - Connector/J 8.0 Developer Guide - 6. ConnectJ reference - 6.1 Driver/Datasource Class Name ๊ฐ€๋ฉด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๋ฌด์Šจ ํด๋ž˜์Šค๋ช…์„ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š”์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ๊ทธ ์™ธ์—๋„ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์ฐธ๊ณ ํ•˜์ž.
  • ๋งŒ์•ฝ ์„ค์น˜๋ฅผ ์•ˆ ํ–ˆ๋‹ค๋ฉด ์‹คํ–‰์‹œ ์ฐธ๊ณ ํ•  ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—†์–ด์„œ HTTP500 ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.

2. DB ์—ฐ๊ฒฐ

  • DriverManager.getConnection("๋””๋น„์ฃผ์†Œ", "๋””๋น„์•„์ด๋””", "๋””๋น„๋น„๋ฐ€๋ฒˆํ˜ธ");
  • DriverManager ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด DB์™€ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb", "root", "1234");
  • ์ด๋Ÿฐ ์‹์œผ๋กœ DB์˜ ์ฃผ์†Œ์™€ ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•œ ๋’ค ์—ฐ๊ฒฐ ๊ฐ์ฒด ์ •๋ณด๋ฅผ Connection์— ์ €์žฅํ•œ๋‹ค.
  • ์ด๋Ÿฌ๋ฉด mysql๊ณผ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ด๋‹ค. ์ด์ œ jsp ํŒŒ์ผ์—์„œ SQL๋ฌธ์„ ์ž‘์„ฑํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

JDBC ์‚ฌ์šฉ ์˜ˆ์ œ 1) ์‚ฌ์šฉ์ž๊ฐ€ ํ™ˆํŽ˜์ด์ง€์— ํšŒ์›๊ฐ€์ž… ํ•˜๋Š” ์ƒํ™ฉ

1. insertForm.jsp๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.

<form action="insertPro.jsp" method="post">
    ์•„์ด๋”” : <input type="text" name="id"><br>
    ๋น„๋ฐ€๋ฒˆํ˜ธ : <input type="password" name="pass"><br>
    ์ด๋ฆ„ : <input type="text" name="name"><br>
    <input type="submit" value="์ „์†กํ•˜๊ธฐ">
  </form>
  • ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  submit๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด insertPro.jsp ํŽ˜์ด์ง€๋กœ ์ „๋‹ฌ๋œ๋‹ค.

2. insertPro.jsp๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ํšŒ์›๊ฐ€์ž… ์ •๋ณด๋ฅผ ๋ฐ›์•„์„œ DB์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.

  <% // ์Šคํฌ๋ฆฝํ‹€๋ฆฟ ์‚ฌ์šฉ
    // 0๋‹จ๊ณ„ : ๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜ - ์™„๋ฃŒ๋์œผ๋‹ˆ ๋กœ๋“œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
    // 1๋‹จ๊ณ„ : ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ
    Class.forName("com.mysql.cj.jdbc.Driver");
  
    System.out.println("๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ ์„ฑ๊ณต!");
    
    // 2๋‹จ๊ณ„ : ๋””๋น„ ์—ฐ๊ฒฐ (๋””๋น„ ๋ฐ”๊พธ๋ ค๋ฉด jdbc:mysql://localhost:3306/๋’ค์— ๋””๋น„ ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋จ)
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb", "root", "1234");
    
    System.out.println("๋””๋น„ ์—ฐ๊ฒฐ ์„ฑ๊ณต!");
    System.out.println("์—ฐ๊ฒฐ์ •๋ณด : " + con);
    
    // 3๋‹จ๊ณ„ : SQL ๊ตฌ๋ฌธ ์ƒ์„ฑ & stmt(statement) ๊ฐ์ฒด ์ƒ์„ฑ
    // String sql = "insert into itwill_member (id, pass, name) values('id', 'pw', 'name')";
    
    // secure ์ฝ”๋”ฉ ์˜ˆ์‹œ) values์— ๋‹ด์„ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ?๋ฅผ ๋„ฃ๋Š”๋‹ค.
    String sql = "insert into itwill_member (id, pass, name) values(?, ?, ?)";
    
    // stmt ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ : sql ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ์ฒด 	   
    // Statement stmt = con.createStatement(); // ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์“ฐ๋ ค๋ฉด valuse ๊ด„ํ˜ธ ์•ˆ์— ๋”ฐ์˜ดํ‘œ๋ฅผ ๋„˜ ๋งŽ์ด ์จ์•ผํ•ด์„œ ์•ˆ ์“ธ ์˜ˆ์ •
                            // ๊ทธ๋ฆฌ๊ณ  ๋”ฐ์˜ดํ‘œ ์•ˆ์— ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•ด์„œ ์จ์•ผํ•ด์„œ ๋ณด์•ˆ์ ์œผ๋กœ ์ข‹์ง€ ์•Š๋‹ค.
    // Statement๋ž‘ PreparedStatement ๊ฐ์ฒด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์“ธ ์ˆ˜ ์žˆ์Œ
    
    // pstmt ๊ฐ์ฒด : sql ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ์ฒด
    PreparedStatement pstmt = con.prepareStatement(sql); // ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์ฟผ๋ฆฌ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ๊ฐ€์„œ ์‚ฌ์ „์ค€๋น„ํ•จ
    
    // ??? ๊ฐ’ sql ๊ตฌ๋ฌธ์— ์ฑ„์›Œ๋„ฃ๊ธฐ
    // pstmt.setXXXXXX(๋ฌผ์Œํ‘œ์˜ ์œ„์น˜, ์‹ค์ œ ๋“ค์–ด๊ฐˆ ๊ฐ’);
    // => XXXXX : ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐํƒ€์ž…(int, double, string, ...)์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ
    // * ? ๊ฐœ์ˆ˜์™€ ๋™์ผํ•œ ๊ตฌ๋ฌธ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ - ?๊ฐ€ 3๊ฐœ๋ฉด ์ฑ„์šฐ๋Š” ๊ตฌ๋ฌธ 3๊ฐœ ์žˆ์–ด์•ผ ํ•จ
    // null ๋„ฃ๊ณ  ์‹ถ์œผ๋ฉด ์ฟผ๋ฆฌ๋ฌธ(String sql) ์•ˆ์— ์ง์ ‘ ๋„ฃ์œผ๋ฉด ๋จ
    pstmt.setString(1, id); // ๋œป : 1๋ฒˆ ๋ฌผ์Œํ‘œ์— id์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
    pstmt.setString(2, pass);
    pstmt.setString(3, name);
    
    // 4๋‹จ๊ณ„ : SQL ๊ตฌ๋ฌธ ์‹คํ–‰
    // stmt.executeUpdate(sql); // ์–˜๋Š” ๋ฏธ๋ฆฌ ์ค€๋น„ ์•ˆํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์คŒ
    pstmt.executeUpdate(); // ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ์‹คํ–‰
    
    System.out.println("insert ๋™์ž‘ ์™„๋ฃŒ!");
  %>
  • ์œ„ ๊ณผ์ •์„ ์™„๋ฃŒํ•˜๋ฉด ํ„ฐ๋ฏธ๋„์ด๋‚˜ ์›Œํฌ๋ฒค์น˜์—์„œ ์ง์ ‘ SQL๋ฌธ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ DB์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋œ๋‹ค!

โ—๏ธ ํŽ˜์ด์ง€๋ฅผ ์‹คํ–‰ํ•  ๋• ~Form.jsp ํŽ˜์ด์ง€์—์„œ ํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํŽ˜์ด์ง€๋Š” Form ํŽ˜์ด์ง€์ด์ง€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” Pro ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์—†๊ณ  ๊ทธ๋Ÿด ํ•„์š”๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Pro ํŽ˜์ด์ง€๋Š” ๊ฐœ๋ฐœ๊ณผ์ •์—์„œ ๊ฐœ๋ฐœ์ž๋งŒ ๋ณด๋Š” ํŽ˜์ด์ง€์ด๋‹ค.

JDBC ์‚ฌ์šฉ ์˜ˆ์ œ 2) ํšŒ์› ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ƒํ™ฉ

1. updateForm.jsp๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ˆ˜์ •ํ•  ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค.

  <form action="updatePro.jsp" method="post">
    ์•„์ด๋”” : <input type="text" name="id"><br>
    ๋น„๋ฐ€๋ฒˆํ˜ธ : <input type="password" name="pass"><br>
    ์ˆ˜์ •ํ•  ์ด๋ฆ„ : <input type="text" name="update_name"><br>
    <input type="submit" value="์ „์†กํ•˜๊ธฐ">
  </form>

2. updatePro.jsp๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ „์†ก๋ฐ›์€ ์ •๋ณด๋ฅผ DB์— ์‚ฝ์ž…ํ•  ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.

  <%
    // ๊ทธ๋ƒฅ ๋ฐ›์œผ๋ฉด ํ•œ๊ธ€์ด ๊นจ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•œ๊ธ€์ฒ˜๋ฆฌ ํ›„ ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
    request.setCharacterEncoding("UTF-8");
    
    // ์ „๋‹ฌ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ €์žฅ
    String id = request.getParameter("id");
    String pass = request.getParameter("pass");
    String uName = request.getParameter("update_name");
  %>
  
  ์•„์ด๋”” : <%=id %><br>
  ๋น„๋ฐ€๋ฒˆํ˜ธ : <%=pass %><br>
  ์ˆ˜์ •ํ•  ์ด๋ฆ„ : <%=uName %><br>
  <hr>
  
  <%
    final String DRIVER = "com.mysql.cj.jdbc.Driver";
    final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
    final String DBID = "root";
    final String DBPASS = "1234";
  %>
  
  <h2> 1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ </h2>
  <%
    Class.forName(DRIVER); // Class๋Š” java.lang ํŒจํ‚ค์ง€์— ๋“ค์–ด์„œ ์ž„ํฌํŠธ ์—†์ด ์“ธ ์ˆ˜ ์žˆ์Œ.
    
    System.out.println("๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ ์„ฑ๊ณต!");
  %>
  
  <h2> 2. ๋””๋น„ ์—ฐ๊ฒฐ </h2>
  <%
    Connection con = DriverManager.getConnection(DBURL, DBID, DBPASS);
    
    System.out.println("๋””๋น„์—ฐ๊ฒฐ ์„ฑ๊ณต!");
  %>
  
  <h2> 3. sql ์ž‘์„ฑ & pstmt ์ƒ์„ฑ </h2>
  <%
    String sql = "update itwill_member set name=? where id=? and pass=?"; // ?๋Š” mysql ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๊ณ  jsp ์ฝ”๋“œ์—์„œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•
    
    PreparedStatement pstmt = con.prepareStatement(sql); // ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋งŒ๋“ค์–ด์ง„ ์ •๋ณด๋ฅผ ์ „๋‹ฌ
    
    // ? ์ฑ„์šฐ๊ธฐ
    pstmt.setString(1, uName);
    pstmt.setString(2, id);
    pstmt.setString(3, pass);
  %>
  
  <h2> 4. sql ์‹คํ–‰ </h2>
  <%
    pstmt.executeUpdate();
    System.out.println("ํšŒ์›์ •๋ณด ์ˆ˜์ • ์™„๋ฃŒ!");
  %>

JDBC ์‚ฌ์šฉ ์˜ˆ์ œ 3) ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ƒํ™ฉ

1. deleteForm.jsp๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์‚ญ์ œํ•  ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.

  <form action="deletePro.jsp" method="post">
    ์•„์ด๋”” : <input type="text" name="id"><br>
    ๋น„๋ฐ€๋ฒˆํ˜ธ : <input type="password" name="pass"><br>
    <input type="submit" value="์ „์†กํ•˜๊ธฐ">
  </form>

2. deletePro.jsp๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ DB์—์„œ ์ „๋‹ฌ๋ฐ›์€ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.

  <%
    request.setCharacterEncoding("UTF-8");
  
    String id = request.getParameter("id");
    String pass = request.getParameter("pass");
  %>
  
  <%
    final String DRIVER = "com.mysql.cj.jdbc.Driver";
    final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
    final String DBID = "root";
    final String DBPASS = "1234";
  %>
  
  <h2> 1. ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ </h2>
  <%
    Class.forName(DRIVER);
  %>
  
  <h2> 2. ๋””๋น„ ์—ฐ๊ฒฐ </h2>
  <%
    Connection con = DriverManager.getConnection(DBURL, DBID, DBPASS);
  %>
  
  <h2> 3. sql ์ž‘์„ฑ & pstmt ์ƒ์„ฑ </h2>
  <%
    String sql = "delete from itwill_member where id=? and pass=?";
    
    PreparedStatement pstmt = con.prepareStatement(sql);
    pstmt.setString(1, id);
    pstmt.setString(2, pass);
  %>
  
  <h2> 4. sql ์‹คํ–‰ </h2>
  <%
    pstmt.executeUpdate();
  
    System.out.println("ํšŒ์›์ •๋ณด ์‚ญ์ œ ์™„๋ฃŒ!");
  %>

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: