Post

[JSP] ๋™์  ๊ตฌํ˜„(DB)

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” JSP๋กœ DB ์ƒ์„ฑ โ†’ ํ…Œ์ด๋ธ” ์ƒ์„ฑ โ†’ ํผ์œผ๋กœ ํ–‰ ์‚ฝ์ž… โ†’ ์กฐํšŒ ์ถœ๋ ฅ์˜ ์ „์ฒด ํ๋ฆ„์„ ํ•™์ƒ ๋“ฑ๋ก ์˜ˆ์ œ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

1
2
3
dbcreate.jsp (DB ์ƒ์„ฑ) โ†’ createTable.jsp (ํ…Œ์ด๋ธ”)
โ†’ formstudent.jsp (์ž…๋ ฅ ํผ) โ†’ insertStudent.jsp (INSERT)
โ†’ formStudentTable.jsp (SELECT ์ถœ๋ ฅ)

1. DBยทํ…Œ์ด๋ธ” ์ƒ์„ฑ (DDL)

์—ฐ๊ฒฐ ํ›„ SQL์„ PreparedStatement.executeUpdate()๋กœ ์‹คํ–‰ํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
// DB ์ƒ์„ฑ
String sql = "CREATE DATABASE univ2";
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();

// ํ…Œ์ด๋ธ” ์ƒ์„ฑ (url ๋์— /univ2 ์ถ”๊ฐ€)
String sql = "CREATE TABLE student("
    + "studentNo int not null, name varchar(5), year tinyint,"
    + "dept varchar(10), addr varchar(50), primary key(studentNo))";
pstmt.executeUpdate();

Desktop View


2. ํผ ์ž…๋ ฅ โ†’ INSERT

ํผ์—์„œ ๋ฐ›์€ ๊ฐ’์„ ๋ฐ”์ธ๋”ฉ ๋ณ€์ˆ˜(?)๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฝ์ž…ํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
<%
    int studentNo = Integer.parseInt(request.getParameter("studentNo"));
    String name = request.getParameter("name");
    // ... ๋‚˜๋จธ์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ

    String sql = "INSERT INTO student(studentNo,name,year,dept,addr) VALUES(?,?,?,?,?)";
    pstmt = conn.prepareStatement(sql);
    pstmt.setInt(1, studentNo);      // ? ์ž๋ฆฌ์— ๊ฐ’ ๋ฐ”์ธ๋”ฉ
    pstmt.setString(2, name);
    // ...
    pstmt.executeUpdate();
%>

๐Ÿ’ก ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” SQL์€ ?(๋ฐ”์ธ๋”ฉ ๋ณ€์ˆ˜)๋ฅผ ์“ฐ๊ณ  setInt/setString์œผ๋กœ ์ฑ„์šด๋‹ค. SQL ์ธ์ ์…˜์„ ๋ง‰๊ณ  ๊ฐ€๋…์„ฑ๋„ ์ข‹๋‹ค.

Desktop View


3. SELECT โ†’ ํ…Œ์ด๋ธ” ์ถœ๋ ฅ

executeQuery()์˜ ๊ฒฐ๊ณผ๋ฅผ ResultSet์œผ๋กœ ๋ฐ›์•„ while(rset.next())๋กœ ์ˆœํšŒํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%
    String sql = "SELECT * FROM student";
    pstmt = conn.prepareStatement(sql);
    ResultSet rset = pstmt.executeQuery();   // ์กฐํšŒ โ†’ ResultSet
%>
<table class="table table-dark table-striped">
    <tr><th>ํ•™๋ฒˆ</th><th>์ด๋ฆ„</th><th>ํ•™๋…„</th><th>์ „๊ณต</th><th>์ฃผ์†Œ</th></tr>
<%
    while (rset.next()) {   // ๋‹ค์Œ ํ–‰์ด ์žˆ์œผ๋ฉด true
%>
    <tr>
        <td><%= rset.getString("studentNo") %></td>
        <td><%= rset.getString("name") %></td>
        <td><%= rset.getString("year") %></td>
        <!-- ... -->
    </tr>
<%
    }
%>
</table>

Desktop View

๐Ÿ’ก ResultSet์˜ ์ปค์„œ๋Š” ์ฒ˜์Œ์— 0๋ฒˆ์งธ ํ–‰(๋นˆ ๊ณณ)์— ์žˆ์–ด, next()๋ฅผ ํ•œ ๋ฒˆ ํ•ด์•ผ ์ฒซ ํ–‰์œผ๋กœ ๊ฐ„๋‹ค. next()๋Š” ํ–‰์ด ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ while ์กฐ๊ฑด์œผ๋กœ ๋”ฑ ๋งž๋‹ค. (์ƒ‰์ƒ์€ Bootstrap์œผ๋กœ ๊พธ๋ช„๋‹ค)

๋ฉ”์†Œ๋“œ์—ญํ• 
executeUpdate()INSERT/CREATE ๋“ฑ (ํ–‰ ์ˆ˜)
executeQuery()SELECT โ†’ ResultSet
rset.next()๋‹ค์Œ ํ–‰์œผ๋กœ (์žˆ์œผ๋ฉด true)
rset.getString("์ปฌ๋Ÿผ")ํ˜„์žฌ ํ–‰์˜ ๊ฐ’

๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
JSP ๋™์  DB
โ”œโ”€ DDL      CREATE โ†’ executeUpdate
โ”œโ”€ INSERT   ? ๋ฐ”์ธ๋”ฉ + setInt/setString โ†’ executeUpdate
โ”œโ”€ SELECT   executeQuery โ†’ ResultSet
โ””โ”€ ์ˆœํšŒ     while(rset.next()) + getString
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
PreparedStatement๋ฐ”์ธ๋”ฉ ๋ณ€์ˆ˜๋กœ ์•ˆ์ „ํ•œ SQL
executeUpdate/Query๋ณ€๊ฒฝ / ์กฐํšŒ
ResultSet์กฐํšŒ ๊ฒฐ๊ณผ (์ปค์„œ๋กœ ์ˆœํšŒ)

JSP๋กœ DB๋ฅผ ๋‹ค๋ฃจ๋ฉด โ€œํผ ์ž…๋ ฅ โ†’ DB ์ €์žฅ โ†’ ์กฐํšŒ ์ถœ๋ ฅโ€์ด๋ผ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ํ๋ฆ„์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ INSERT๋Š” ? ๋ฐ”์ธ๋”ฉ, SELECT๋Š” ResultSet ์ˆœํšŒ๊ฐ€ ๊ธฐ๋ณธ ํŒจํ„ด์ด๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.