์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
*[59] 230323 JSP Ch. 14 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด: JSP์์ JDBC(Java DataBase Connectivity) ํ๋ก๊ทธ๋๋ฐํ๊ธฐ [K-๋์งํธ ํธ๋ ์ด๋ 59์ผ] SQL ๋ณธ๋ฌธ
*[59] 230323 JSP Ch. 14 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด: JSP์์ JDBC(Java DataBase Connectivity) ํ๋ก๊ทธ๋๋ฐํ๊ธฐ [K-๋์งํธ ํธ๋ ์ด๋ 59์ผ] SQL
yjyuwisely 2023. 3. 23. 11:25230323 Thu 59th class
Ch. 14 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด
์ง๋: p. 315~ (์ฃผ์ ๋ณ๋ก ๋ฌถ๊ธฐ ์ํด ์๋ซ๊ธ๋ก ๊ธ ๋ด์ฉ ์ฎ๊น.)
์ง๋: p. 376 ~ (๊ต์ฌ: ์ต๋ฒ๊ท ์ JSP 2.3 ์น ํ๋ก๊ทธ๋๋ฐ: ๊ธฐ์ด๋ถํฐ ์ค๊ธ๊น์ง, ์ ์: ์ต๋ฒ๊ท )
์ฑ
์์ ์ฝ๋: https://github.com/madvirus/jsp23
์ ์ ๋ธ๋ก๊ทธ: https://javacan.tistory.com/
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
Ch. 14 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด
01 ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ด
1.1 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ DBMS
1.2 ํ ์ด๋ธ๊ณผ ๋ ์ฝ๋
1.3 ์ฃผ์ํค(Primary Key)์ ์ธ๋ฑ์ค(Index)
1.4 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ฐ์ ์์
1.5 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ์ ํ์ ์์
02 ์์ ์คํ์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
03 SQL ๊ธฐ์ด
3.1 ์ฃผ์ SQL ํ์
3.2 ํ ์ด๋ธ ์์ฑ ์ฟผ๋ฆฌ
3.3 ๋ฐ์ดํฐ ์ฝ์ ์ฟผ๋ฆฌ
3.4 ๋ฐ์ดํฐ ์กฐํ ์ฟผ๋ฆฌ - ์กฐํ ๋ฐ ์กฐ๊ฑด
3.5 ๋ฐ์ดํฐ ์ฟผ๋ฆฌ ์กฐํ - ์ ๋ ฌ
3.6 ๋ฐ์ดํฐ ์ฟผ๋ฆฌ ์กฐํ - ์งํฉ
3.7 ๋ฐ์ดํฐ ์์ ์ฟผ๋ฆฌ
3.8 ๋ฐ์ดํฐ ์ญ์ ์ฟผ๋ฆฌ
3.9 ์กฐ์ธ
04 ํ๋ก์ ํธ ์ค๋น
05 JSP์์ JDBC ํ๋ก๊ทธ๋๋ฐํ๊ธฐ
5.1 JDBC์ ๊ตฌ์กฐ
5.2 JDBC ๋๋ผ์ด๋ฒ ์ค๋นํ๊ธฐ
5.3 JDBC ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋ฉ ์คํ์ผ
5.4 DBMS์์ ํต์ ์ ์ํ JDBC ๋๋ผ์ด๋ฒ
5.5 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณ์ ์ํ JDBC URL
5.6 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
5.7 Statement๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ ์คํ
5.8 ResultSet์์ ๊ฐ ์ฝ์ด์ค๊ธฐ
5.9 ResetSet์์ LONG VARCHAR ํ์ ๊ฐ ์ฝ์ด์ค๊ธฐ
5.10 Statement๋ฅผ ์ด์ฉํ ์ฟผ๋ฆฌ ์คํ ์ ์์๋ฐ์ดํ ์ฒ๋ฆฌ
5.11 PreparedStatement๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ ์คํ
5.12 PreparedStatement์์ LONG VARCHAR ํ์ ๊ฐ ์ ํ๊ธฐ
5.13 PreparedStatement ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์
06 ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์ JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉํ๊ธฐ
07 JDBC์์ ํธ๋์ญ์ ์ฒ๋ฆฌ
08 ์ปค๋ฅ์ ํ
8.1 ์ปค๋ฅ์ ํ์ด๋
8.2 DBCP๋ฅผ ์ด์ฉํด์ ์ปค๋ฅ์ ํ ์ฌ์ฉํ๊ธฐ
์น ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ์ด ๋ฐ์ด๋ผ๊ณ ํ ์ ๋๋ก ๊ฑฐ์ ๋ชจ๋ JSP ํ์ด์ง๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ๋ค. ์๋ฐ์์๋ JDBC API๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฒ ๋๋๋ฐ, JDBC API ์ฌ์ฉ๋ฒ์ ์ตํ๋ณธ๋ค.
์ฌ์ฉ์ ํ๋ฉด(front-end) : ์ง์ ์ ์ผ๋ก ๋์ ๋ณด์ธ๋ค. |
์๋น์ค(back-end) ex) ํ์๊ฐ์ : ํ๋ฉด์์ ์์งํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด์ ์๋ฒ์ ๋ฃ๋๋ค. ์๋ฒ๊ฐ ํ์ํ ์ด์ : ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด์ ๋ฐฑ์๋ ์์ ์ ํ๋ค. |
|
HTML ↓ CSS ↓ Javascript + Server = ์ ์ฒด๊ฐ JSP๊ฐ ๋๋ค. |
JAVA ↓ Database (ํ์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ํ ํ์ ์ถ๊ฐ๊ฐ ๋๋ค. ์๊ตฌ ๋ณด๊ด) JDBC(Java Database Connectivity)๋ก ์ฐ๊ฒฐํ๋ค. (=ODBC) |
14.4 ํ๋ก์ ํธ ์ค๋น
14.5 JSP์์ JDBC ํ๋ก๊ทธ๋๋ฐํ๊ธฐ
์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ์ ํ ๋์๋ JDBC(Java DataBase Connectivity) API(Application Programming Interface)๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จ๋ ์์
์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ API์ด๋ค.
์๋ฐ๋ DBMS์ ์ข
๋ฅ์ ์๊ด์์ด ํ๋์ JDBC API๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ์ผ๋จ ์ตํ๋๋ฉด ๋ชจ๋ DMBS์ ๋ํด์ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค.
1) JDBC์ ๊ตฌ์กฐ p. 378
JDBC API๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ต์ ์ธ ๊ตฌ์กฐ์ด๋ค.
๊ทธ๋ฆผ ์ฐธ๊ณ
๊ฐ๊ฐ์ DBMS๋ ์์ ์๊ฒ ์๋ง์ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ex) ์ค๋ผํด, MySQL, MS-SQL ๋ฑ
JDBC API๋ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ์ ํ๋ค.
2) JDBC ๋๋ผ์ด๋ฒ ์ค๋นํ๊ธฐ
https://dev.mysql.com/downloads/ ์ ์ ์ํ๋ค.
์ฐ์ธก์ Connector/J๋ฅผ ๋ค์ด ๋ฐ๋๋ค.
์์ถ์ ํ๊ณ ๋ณต์ฌํด์ ์๋์ฒ๋ผ ๋ถ์ฌ ๋ฃ๋๋ค.
3) JDBC ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋ฉ ์คํ์ผ
JDBC ํ๋ก๊ทธ๋จ์ ์ ํ์ ์ธ ์คํ ์์
1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
๊ตฌํจ
3. ์ฟผ๋ฆฌ ์คํ์ ์ํ Statement ๊ฐ์ฒด ์์ฑ
4. ์ฟผ๋ฆฌ ์คํ
5. ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ ์ฌ์ฉ
6. Statement ์ข
๋ฃ
7. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์ข
๋ฃ
์๋ ์ฝ๋๋ฅผ ๋ฃ์ด์ค๋ค.
<%@ page import="java.sql.*" %>
์์ 14-1) veiwMemberList.jsp
๊ณ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
= sample
String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>ํ์ ๋ชฉ๋ก</title></head>
<body>
<%
// 1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ(mysql)
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
//์ฐ๊ฒฐํ๊ธฐ
//๋๋ผ์ด๋ธ ๋งค๋์ ์๊ฒ Connection๊ฐ์ฒด๋ฅผ ๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
//Connection์ ์ป๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ(url,id,๋น๋ฐ๋ฒํธ)
try{
String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
out.println("DB ์ฐ๊ฒฐ ์ฑ๊ณต");
}catch(SQLException ex){
out.println("DB ์ฐ๊ฒฐ ์คํจ");
}finally{
if(conn!=null){conn.close();}
}
%>
</body>
</html>
์๋ฐ์ 2์ฐจํ ๋ฐฐ์ด์ ํ๋์ ํ์
๋ง ์ ์ฅํ๋ฏ๋ก ์๋ฐ๋ฅผ ์ฐ๊ธฐ ์ ๋งคํ๋ค.
์๋ฐ๊ฐ ํ
์ด๋ธ ํํ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด (ํด๋์ค๋ก ๋ง๋ค์ด์ ์ ์ฅ)
Resultset: select์ ๊ฒฐ๊ณผ๋ฅผ DBMS์์ java๋ก ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
selectํ ๊ฒ(ํ
์ด๋ธ ํํ)์ ๋ณ์์ฒ๋ผ ์๋ฐ์ ์ ์ฅํ ์ ์๊ฒ ํ๋ ๊ฐ์ฒด
์์ 14-1) mySQL์ board ํ
์ด๋ธ์ DB๋ฅผ ๊ฐ์ ธ์จ๋ค. viewBoardList.jsp
์กฐ๊ฑด์์ ๊ณต์์ด ๋ค์ด๊ฐ ์๋ ์๊ณ true๊ฐ ๋ค์ด๊ฐ ์๋ ์๋ค.
while์ ์กฐ๊ฑด๋ฌธ์ด true ์ด๋ฏ๋ก ์กฐ๊ฑด๋ฌธ์ ํญ์ ์ฐธ์ด ๋๋ค. while์ ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ธ ๋์์ while์ ์ํด ์๋ ๋ฌธ์ฅ๋ค์ ๊ณ์ํด์ ์ํํ๋ฏ๋ก ์์ ์๋ ๋ฌดํํ๊ฒ while๋ฌธ ๋ด์ ๋ฌธ์ฅ๋ค์ ์ํํ ๊ฒ์ด๋ค.
mySQL์ ์๋ ๊ธ์ ์ฐธ๊ณ ํ๋ค.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>ํ์ ๋ชฉ๋ก</title></head>
<body>
<table border="1">
<tr>
<td>๊ฒ์ํ๋ฒํธ</td><td>์ ๋ชฉ</td><td>์์ฑ์</td><td>์์ฑ์ผ</td><td>์กฐํ</td><td>์ข์์</td>
</tr>
<%
// 1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ(mysql)
Class.forName("com.mysql.jdbc.Driver");
//java api์ db์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ๊ฐ์ฒด
Connection conn = null;
//workbench sql์ ์์ฑํ ํ ctrl+enter(๊ฒฐ๊ณผ๋์ถ)
//sql๋ฌธ์ฅ์ ์์ฑ์ ํ๊ณ , ๊ทธ sql๋ฌธ์ฅ์ ์คํํ๊ธฐ ์ํ ๊ฐ์ฒด
Statement stmt = null;
//select์ ๊ฒฐ๊ณผ๋ฅผ DBMS์์ java๋ก ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
ResultSet rs = null;
//์ฐ๊ฒฐํ๊ธฐ
//๋๋ผ์ด๋ธ ๋งค๋์ ์๊ฒ Connection๊ฐ์ฒด๋ฅผ ๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
//Connection์ ์ป๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ(url,id,๋น๋ฐ๋ฒํธ)
try{
String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
String query = "select * from board";
//2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์์ฑ
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
//3. Statement ์์ฑ
stmt = conn.createStatement();
//4. ์ฟผ๋ฆฌ ์คํ
//workbench์์ ctrl+enter(์ฟผ๋ฆฌ๋ฌธ์ฅ์ ์คํ)๋ฅผ ํตํด ๋์ถ๋ select๊ฒฐ๊ณผ๋ฅผ Resultset์ ์ ์ฅ
rs = stmt.executeQuery(query);
//5. ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ: ๋ค์ ํ(์ฒซ ๋ฒ์งธ ํ)์ด ์กด์ฌํ๋ฉด rs.next()๋ true๋ฅผ ๋ฆฌํด
//rs.next: ํ
์ด๋ธ์์ ๋ฐ ํ์ผ๋ก ๋ด๋ ค์จ๋ค. ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ true (while๋ฌธ์ด true)์ด๋ฏ๋ก ๋ฐ๋ณตํ๋ค.
//while๋ฌธ์ด false์ด๋ฉด ์ข
๋ฃ
while(rs.next()){
%>
<tr>
<td><%=rs.getInt("no") %>
</td>
<td><%=rs.getString("title") %>
</td>
<td><%=rs.getString("id") %>
</td>
<td><%=rs.getString("regdate") %>
</td>
<td><%=rs.getInt("count") %>
</td>
<td><%=rs.getInt("good") %>
</td>
</tr>
<%
}
out.println("DB ์ฐ๊ฒฐ ์ฑ๊ณต");
}catch(SQLException ex){
out.println("DB ์ฐ๊ฒฐ ์คํจ");
}finally{
if(conn!=null){conn.close();}
}
%>
</table>
</body>
</html>
๊ฒฐ๊ณผ)
๊ต์ฌ์ ์์ 14-1) viewMemberListbook.jsp p. 380
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>ํ์ ๋ชฉ๋ก</title></head>
<body>
MEMBER ํ
์ด๋ธ์ ๋ด์ฉ
<table border="1">
<tr>
<td>์ด๋ฆ</td><td>์์ด๋</td><td>์ด๋ฉ์ผ</td>
</tr>
<%
// 1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ(mysql)
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
String jdbcDriver = "jdbc:mysql://localhost:3306/chap14?" +
"useUnicode=true&characterEncoding=utf8";
String dbUser = "jspexam";
String dbPass = "jsppw";
String query = "select * from MEMBER order by MEMBERID";
// 2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์์ฑ
conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
// 3. Statement ์์ฑ
stmt = conn.createStatement();
// 4. ์ฟผ๋ฆฌ ์คํ
rs = stmt.executeQuery(query);
// 5. ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
while(rs.next()) {
%>
<tr>
<td><%= rs.getString("NAME") %></td>
<td><%= rs.getString("MEMBERID") %></td>
<td><%= rs.getString("EMAIL") %></td>
</tr>
<%
}
} catch(SQLException ex) {
out.println(ex.getMessage());
ex.printStackTrace();
} finally {
// 6. ์ฌ์ฉํ Statement ์ข
๋ฃ
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}
// 7. ์ปค๋ฅ์
์ข
๋ฃ
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
%>
</table>
</body>
</html>
4) DBMS์์ ํต์ ์ ์ํ JDBC ๋๋ผ์ด๋ฒ p. 383
5) ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณ์ ์ํ JDBC URL
6) ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
7) Statement๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ ์คํ (executeQuery, executeUpdate) p. 387
Statement stmt = conn.createStatement();
Statement ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์๋ค.
- ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋ (executeQuery, executeUpdate)
ResultSet executeQuery(String query)
SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค. SELECT ์ฟผ๋ฆฌ์ ๊ฒฐ๊ด๊ฐ์ java.sql.ResultSet ๊ฐ์ฒด์ ์ ์ฅํด์ ๋ฆฌํดํ๋ค.
int executeUpdate(String query)
INSERT, UPDATE, DELETE ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค. INSERT, UPDATE, DELETE ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ก ๋ณ๊ฒฝ๋ (๋๋ ์ฝ์
๋) ๋ ์ฝ๋์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
๊ฑด์๋ง ์๋ ค์ค๋ค. (ex. MySQL)
8) ResultSet์์ ๊ฐ ์ฝ์ด์ค๊ธฐ p. 391
9) ResetSet์์ LONG VARCHAR ํ์ ๊ฐ ์ฝ์ด์ค๊ธฐ
10) Statement๋ฅผ ์ด์ฉํ ์ฟผ๋ฆฌ ์คํ ์ ์์๋ฐ์ดํ ์ฒ๋ฆฌ
11) PreparedStatement๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ ์คํ
๊ฒ์ํ ์ ๋ชฉ ํด๋ฆญ์ URL์ ๊ฒ์ํ ๋ฒํธ์ ์ซ์๊ฐ ๋์จ๋ค.
์์ ) viewBorderList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>๊ฒ์ํ</title></head>
<body>
<table border="1">
<tr>
<td>๊ฒ์ํ๋ฒํธ</td><td>์ ๋ชฉ</td><td>์์ฑ์</td><td>์์ฑ์ผ</td><td>์กฐํ</td><td>์ข์์</td>
</tr>
<%
// 1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ(mysql)
Class.forName("com.mysql.jdbc.Driver");
//java api์ db์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ๊ฐ์ฒด
Connection conn = null;
//workbench sql์ ์์ฑํ ํ ctrl+enter(๊ฒฐ๊ณผ๋์ถ)
//sql๋ฌธ์ฅ์ ์์ฑ์ ํ๊ณ , ๊ทธ sql๋ฌธ์ฅ์ ์คํํ๊ธฐ ์ํ ๊ฐ์ฒด
Statement stmt = null;
//select์ ๊ฒฐ๊ณผ๋ฅผ DBMS์์ java๋ก ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
ResultSet rs = null;
//String title="๊ฐ๋๋ค";
//์ฐ๊ฒฐํ๊ธฐ
//๋๋ผ์ด๋ธ ๋งค๋์ ์๊ฒ Connection๊ฐ์ฒด๋ฅผ ๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
//Connection์ ์ป๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ(url,id,๋น๋ฐ๋ฒํธ)
try{
String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
String query = "select * from board"; //executeQuery
//String query = "select * from board where title = '"+"title"+"'";
//String query = "update board set title='๊ฐ๋๋ค' where no = 1"; //executeUpdate
//String query = "insert into board(title, content)" values('์ ๋ชฉ์
๋๋ค.','๋ด์ฉ์ ์ฌ๊ธฐ์...')"; //executeUpdate
//String query = "delete from board where no = 1"; // executeUpdate
//2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์์ฑ
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
//3. Statement ์์ฑ
stmt = conn.createStatement();
//4. ์ฟผ๋ฆฌ ์คํ
//workbench์์ ctrl+enter(์ฟผ๋ฆฌ๋ฌธ์ฅ์ ์คํ)๋ฅผ ํตํด ๋์ถ๋ select๊ฒฐ๊ณผ๋ฅผ Resultset์ ์ ์ฅ
rs = stmt.executeQuery(query);
//stmt.executeq
//5. ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
//rs.next: ํ
์ด๋ธ์์ ๋ฐ ํ์ผ๋ก ๋ด๋ ค์จ๋ค. ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ true (while๋ฌธ์ด true)์ด๋ฏ๋ก ๋ฐ๋ณตํ๋ค.
//while๋ฌธ์ด false์ด๋ฉด ์ข
๋ฃ
while(rs.next()){
%>
<tr>
<td><%=rs.getInt("no") %>
</td>
<td><a href="viewBoardDetail.jsp?no=<%=rs.getInt("no")%>"><%=rs.getString("title") %></a>
</td>
<td><%=rs.getString("id") %>
</td>
<td><%=rs.getString("regdate") %>
</td>
<td><%=rs.getInt("count") %>
</td>
<td><%=rs.getInt("good") %>
</td>
</tr>
<%
}
out.println("DB ์ฐ๊ฒฐ ์ฑ๊ณต");
}catch(SQLException ex){
out.println("DB ์ฐ๊ฒฐ ์คํจ");
}finally{
if(conn!=null){conn.close();}
}
%>
</table>
</body>
</html>
๊ฒฐ๊ณผ)
์์ ) ViewBoardDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head><title>๊ฒ์ํ ๋ด์ฉ</title></head>
<body>
<table border="1">
<tr>
<td>๊ฒ์ํ๋ฒํธ</td><td>์ ๋ชฉ</td><td>๊ฒ์๊ธ ๋ด์ฉ</td><td>์์ฑ์</td><td>์์ฑ์ผ</td><td>์กฐํ</td><td>์ข์์</td>
</tr>
<%
int no = Integer.parseInt(request.getParameter("no"));
// 1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ(mysql)
Class.forName("com.mysql.jdbc.Driver");
//java api์ db์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ๊ฐ์ฒด
Connection conn = null;
//workbench sql์ ์์ฑํ ํ ctrl+enter(๊ฒฐ๊ณผ๋์ถ)
//sql๋ฌธ์ฅ์ ์์ฑ์ ํ๊ณ , ๊ทธ sql๋ฌธ์ฅ์ ์คํํ๊ธฐ ์ํ ๊ฐ์ฒด
//Statement stmt = null;
PreparedStatement pstmt = null;
//select์ ๊ฒฐ๊ณผ๋ฅผ DBMS์์ java๋ก ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
ResultSet rs = null;
//์ฐ๊ฒฐํ๊ธฐ
//๋๋ผ์ด๋ธ ๋งค๋์ ์๊ฒ Connection๊ฐ์ฒด๋ฅผ ๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
//Connection์ ์ป๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ(url,id,๋น๋ฐ๋ฒํธ)
try{
String jdbcDriver = "jdbc:mysql://localhost:3306/sample?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPass = "1234";
//2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
์์ฑ
conn = DriverManager.getConnection(jdbcDriver,dbUser,dbPass);
String query = "select * from board where no =?"; //executeQuery
//3. Statement ์์ฑ
pstmt = conn.prepareStatement(query);
pstmt.setInt(1, no); //์ฒซ๋ฒ์งธ ๋ฌผ์ํ์๋ no๊ฐ์ ๋ฃ์ด๋ผ.
//4. ์ฟผ๋ฆฌ ์คํ
//workbench์์ ctrl+enter(์ฟผ๋ฆฌ๋ฌธ์ฅ์ ์คํ)๋ฅผ ํตํด ๋์ถ๋ select๊ฒฐ๊ณผ๋ฅผ Resultset์ ์ ์ฅ
rs = pstmt.executeQuery();
//stmt.executeq
//5. ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
//rs.next: ํ
์ด๋ธ์์ ๋ฐ ํ์ผ๋ก ๋ด๋ ค์จ๋ค. ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ true (while๋ฌธ์ด true)์ด๋ฏ๋ก ๋ฐ๋ณตํ๋ค.
//while๋ฌธ์ด false์ด๋ฉด ์ข
๋ฃ
if(rs.next()){
%>
<!-- ์ฌ๊ธฐ์ ๊ฒ์ํ ๊ธ ๋์ค๊ฒ ๋ง๋ ๋ค. -->
<tr>
<td><%=rs.getInt("no") %>
</td>
<td><a href="viewBoardDetail.jsp?no=<%=rs.getInt("no")%>"><%=rs.getString("title") %></a>
</td>
<td><%=rs.getString("content") %>
</td>
<td><%=rs.getString("id") %>
</td>
<td><%=rs.getString("regdate") %>
</td>
<td><%=rs.getInt("count") %>
</td>
<td><%=rs.getInt("good") %>
</td>
</tr>
<%
}
out.println("DB ์ฐ๊ฒฐ ์ฑ๊ณต");
}catch(SQLException ex){
out.println("DB ์ฐ๊ฒฐ ์คํจ");
}finally{
if(conn!=null){conn.close();}
}
%>
</table>
</body>
</html>
๊ฒ์๊ธ ์ ๋ชฉ ๋๋ฅด๋ฉด ๋ด์ฉ์ด ๋์ค๊ฒ ๋ง๋ ๋ค.
12) PreparedStatement์์ LONG VARCHAR ํ์ ๊ฐ ์ ํ๊ธฐ
13) PreparedStatement ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์
14.6 ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์ JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉํ๊ธฐ
14.7 JDBC์์ ํธ๋์ญ์ ์ฒ๋ฆฌ
14.8 ์ปค๋ฅ์ ํ p. 416
์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ ์ปค๋ฅ์
ํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ณผ๋ถํ๊ฐ ๋ ์ผ์ด๋๊ฒ ํ๋ค.
1) ์ปค๋ฅ์
ํ์ด๋
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋ ์ปค๋ฅ์ ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ํ(pool) ์์ ์ ์ฅํด ๋๊ณ ์๋ค๊ฐ ํ์ํ ๋์ ์ปค๋ฅ์ ์ ํ์์ ๊ฐ์ ธ๋ค ์ฐ๊ณ ๋ค์ ํ์ ๋ฐํํ๋ ๊ธฐ๋ฒ์ด๋ค.
๊ทธ๋ฆผ ์ฐธ๊ณ : https://owin2828.github.io/devlog/2020/01/06/java-4.html
ํน์ง
- ํ ์์ ๋ฏธ๋ฆฌ ์ปค๋ฅ์
์ด ์์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ปค๋ฅ์
์ ์์ฑํ๋ ๋ฐ ๋๋ ์ฐ๊ฒฐ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
- ์ปค๋ฅ์
์ ๊ณ์ํด์ ์ฌ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ฑ๋๋ ์ปค๋ฅ์
์๊ฐ ์ผ์ ํ๊ฒ ์ ์ง๋๋ค.