๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ•Š๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค

SpringBoot Part2-2

by hyeon-z 2023. 7. 3.

 

1. JDBC

 

JDBC(Java Database Connectivity)๋ž€?

 

https://www.javaguides.net/2018/10/java-jdbc-api-overview.html

์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ” API(์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค)

 

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.

- ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ณ  SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

-  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(DBMS)๊ณผ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋“œ๋ผ์ด๋ฒ„์™€ API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

JDBC Architecture Model

 

https://www.tutorialspoint.com/jdbc/jdbc-introduction.htm

 

๐Ÿ‘† JDBC API


- Java ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

- java.sql ํŒจํ‚ค์ง€์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํฌํ•จํ•œ๋‹ค.

 


๐Ÿ‘† JDBC ๋“œ๋ผ์ด๋ฒ„ ๋งค๋‹ˆ์ €

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•œ๋‹ค.
- JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋“œํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ , ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ž‘์—…์„ ์œ„ํ•œ ์—ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.


๐Ÿ‘† JDBC ๋“œ๋ผ์ด๋ฒ„

ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(DBMS)๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋“œ๋ผ์ด๋ฒ„ ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ

- ๊ฐ๊ฐ์˜ DBMS์— ๋Œ€ํ•ด ํŠน์ • ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ด ๋“œ๋ผ์ด๋ฒ„๋Š” ํ•ด๋‹น DBMS์™€์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•œ๋‹ค.
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ ‘์† ๋ฐ ์ฟผ๋ฆฌ ์‹คํ–‰, ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.


๐Ÿ‘† ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

- ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ
- JDBC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

JDBC Flow

 

1. JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋“œ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค.

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ: DriverManager.getConnection() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” JDBC URL, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž ์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ์„ ์ธ์ž๋กœ ๋ฐ›์•„ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•œ๋‹ค.

3. SQL ์ฟผ๋ฆฌ ์‹คํ–‰: Connection ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Statement ๋˜๋Š” PreparedStatement ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค. Statement ๊ฐ์ฒด๋Š” ์ •์ ์ธ SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ , PreparedStatement ๊ฐ์ฒด๋Š” ๋™์ ์ธ SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

4. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ: SQL ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ResultSet ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ฑฐ๋‚˜(SELECT), ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค(UPDATE, INSERT, DELETE). ResultSet ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ˆœํšŒํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

5. ์—ฐ๊ฒฐ ํ•ด์ œ: ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ResultSet, Statement, Connection ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค. close() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•œ๋‹ค.

 

๐Ÿ“Œ try-with-resources 

๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก์„ ์ •์˜ํ•˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ด ์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

๋ฆฌ์†Œ์Šค๋Š” AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋“ค๋กœ์„œ, ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

try (๋ฆฌ์†Œ์Šค ์ดˆ๊ธฐํ™”) {
    // ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ
} catch (Exception e) {
    // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
}

try ๋ธ”๋ก ์•ˆ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , try ๋ธ”๋ก์ด ๋๋‚  ๋•Œ ์ž๋™์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•œ๋‹ค.
๋ฆฌ์†Œ์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ () ์•ˆ์— ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

2. JDBC CRUD

 

Statement

 

์ •์ ์ธ SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ์‹คํ–‰ํ•  SQL ๋ฌธ์„ ๋ฌธ์ž์—ด๋กœ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค.
- ๊ฐ์ฒด๋Š” Connection ๊ฐ์ฒด์˜ createStatement() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.
- ๋งค๋ฒˆ SQL ๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น SQL ๋ฌธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „์†กํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ์ฆ‰, SQL ๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ปดํŒŒ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค.
- ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฌธ์ž์—ด๋กœ ์ง์ ‘ SQL ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์ธ ์ฟผ๋ฆฌ ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐํ™”๋œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
SQL Injection ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฟผ๋ฆฌ์— ์ง์ ‘ ์‚ฝ์ž…ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
- ์ฃผ๋กœ ๋‹จ์ˆœํ•œ SELECT ๋ฌธ์ด๋‚˜ DDL(Data Definition Language) ๋ฌธ์žฅ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

๐Ÿ’ก ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

1. Statement ๊ฐ์ฒด ์ƒ์„ฑ

Statement statement = connection.createStatement();

Statement ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Connection ๊ฐ์ฒด์˜ createStatement() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

2. SQL ๋ฌธ ์‹คํ–‰

String sql = "SELECT * FROM users";
ResultSet resultSet = statement.executeQuery(sql);
// ๋˜๋Š”
int rowCount = statement.executeUpdate(sql);

์ƒ์„ฑํ•œ Statement ๊ฐ์ฒด์˜ executeQuery() ๋˜๋Š” executeUpdate() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ SQL ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.

executeQuery()๋Š” SELECT ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, executeUpdate()๋Š” INSERT, UPDATE, DELETE ๋“ฑ์˜ ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ์˜ํ–ฅ์„ ๋ฐ›์€ ํ–‰์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

3. ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ

while (resultSet.next()) {
    String username = resultSet.getString("username");
    // ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
}

executeQuery()๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜๋œ ResultSet ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ ํ–‰๋“ค์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


4. ์ž์› ํ•ด์ œ

statement.close();
resultSet.close();

Statement์™€ ResultSet ๋“ฑ์˜ ์ž์›์€ ์‚ฌ์šฉ์ด ๋๋‚œ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค.

close() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž์›์„ ํ•ด์ œํ•œ๋‹ค.

 

PreparedStatement

 

๋™์ ์ธ SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. SQL ๋ฌธ ์•ˆ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
- Connection ๊ฐ์ฒด์˜ prepareStatement() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ SQL ๋ฌธ์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.
- SQL ๋ฌธ์„ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•˜์—ฌ ์ปดํŒŒ์ผ๋œ ์ƒํƒœ๋กœ ์บ์‹œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ์—๋Š” ์ปดํŒŒ์ผ๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.
- SQL ๋ฌธ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” SQL Injection ๊ณต๊ฒฉ์„ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.
- ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•  ๋•Œ๋Š” set ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์œ„์น˜(์ธ๋ฑ์Šค)์™€ ๊ฐ’ ๋“ฑ์„ ์ง€์ •ํ•œ๋‹ค.
- ๋™์ผํ•œ SQL ๋ฌธ์„ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋‚˜ ๋™์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
- ์‚ฌ์šฉํ•˜๋ฉด SQL ๋ฌธ๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ’ก ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

1. PreparedStatement ๊ฐ์ฒด ์ƒ์„ฑ

String sql = "SELECT * FROM users WHERE username = ?";
PreparedStatement statement = connection.prepareStatement(sql);

PreparedStatement ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Connection ๊ฐ์ฒด์˜ prepareStatement() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด๋•Œ SQL ๋ฌธ์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.

 

2. ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ

statement.setString(1, "john");

SQL ๋ฌธ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ์œ„ํ•ด set ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

set ๋ฉ”์„œ๋“œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์‹ค์ œ ๊ฐ’์ด๋‹ค.

 

3. SQL ๋ฌธ ์‹คํ–‰

ResultSet resultSet = statement.executeQuery();
// ๋˜๋Š”
int rowCount = statement.executeUpdate();

PreparedStatement ๊ฐ์ฒด์˜ executeQuery() ๋˜๋Š” executeUpdate() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ SQL ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.

executeQuery()๋Š” SELECT ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, executeUpdate()๋Š” INSERT, UPDATE, DELETE ๋“ฑ์˜ ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ์˜ํ–ฅ์„ ๋ฐ›์€ ํ–‰์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

4. ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ

while (resultSet.next()) {
    String username = resultSet.getString("username");
    // ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
}

executeQuery()๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜๋œ ResultSet ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ ํ–‰๋“ค์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

 

5. ์ž์› ํ•ด์ œ

statement.close();
resultSet.close();

PreparedStatement, ResultSet ๋“ฑ์˜ ์ž์›์€ ์‚ฌ์šฉ์ด ๋๋‚œ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค.

close() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž์›์„ ํ•ด์ œํžŒ๋‹ค.

'๐Ÿ•Š๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

SpringBoot Part 3-1  (0) 2023.07.06
SpringBoot Part2-1  (0) 2023.06.27
SpringBoot Part1-5  (0) 2023.06.26
SpringBoot Part1-4  (0) 2023.06.23
SpringBoot Part1-3  (0) 2023.06.22

๋Œ“๊ธ€