JDBC: ์๋ฐ ํ๋ก๊ทธ๋จ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ฝ์ , ์์ , ์ญ์ ๋ฑ์ ์์ ์ ์ํํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ฐ API
JDBC๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ๊ณผ ์ํธ์์ฉํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
JDBC ์ฃผ์ ์์
- JDBC ๋๋ผ์ด๋ฒ: JDBC API์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ํต์ ์ ๋ด๋นํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ์ฟผ๋ฆฌ ์คํ ๋ฐ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ ๋ฑ์ ์ํ
- JDBC API: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ์ฟผ๋ฆฌ ์คํ, ๊ฒฐ๊ณผ ์ฒ๋ฆฌ, ํธ๋์ญ์
๊ด๋ฆฌ ๋ฑ ๋ค์ํ ์์
์ ์ํํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ API(Connection, Statement, ResultSet ๋ฑ)
JDBC ์๋ ์์
1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ (๋ฐ์ดํฐ๋ฒ ์ด์ค url, ์ฌ์ฉ์ ์ด๋ฆ, ์ํธ ๋ฑ์ ์ฐ๊ฒฐ ์ ๋ณด ์ด์ฉ) ํ๊ธฐ ์ํด Connection ๊ฐ์ฒด ์์ฑ
3. Connection ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ Statement ๊ฐ์ฒด ์์ฑ
4. Statement ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ SQL ์ฟผ๋ฆฌ๋ฌธ์ ์คํ -> ๊ฒฐ๊ณผ๋ฅผ ResultSet ๊ฐ์ฒด์ ๋ฐ์
5. ResultSet ๊ฐ์ฒด๋ฅผ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌ
6. ์์
์ด ์๋ฃ๋๋ฉด ResultSet, Statement, Connection ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ๋ซ์ (๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ข
๋ฃ)
์ด์ ์ฌ์ฉ๋๋ ๊ณผ์ ์ ์ฝ๋๋ก ์ง์ ์ดํด๋ณด์.
๋ฐ์ ์ ์ฒด ์์ ์ฝ๋์ด๋ค.
package com.test.jdbc;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.test.member.Member;
public class JDBCConnection {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String uri = "jdbc:mysql://localhost:3306/webdev";
String userid = "webmaster";
String userpw = "12345";
String query = "select userid, username, age from tbl_test order by userid"; //order ์์ ์ผ๋ฉด ๊ทธ๋ฅ ์ค๋ฆ์ฐจ์์ผ๋ก ๋จ
Connection con; //Statement ๊ฐ์ฒด ์์ฑ ๋ฐ JDBC ์ฐ๊ฒฐ ์ข
๋ฃ
Statement stmt; //ResultSet ๊ฐ์ฒด๋ฅผ ์์ฑ
ResultSet rs; //SQL๋ฌธ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด์ค๋ ๊ฐ์ฒด๋ก ํ์ฌ ๋ฐ์ดํฐ์ ํ(๋ ์ฝ๋ ์์น)์ ์์น๋ฅผ ๋ํ๋ด๋ ์ฟผ๋ฆฌ
Class.forName("org.mariadb.jdbc.Driver"); //JDBC ๋๋ฆฌ์ด๋ฒ ๋ก๋ฉ
con = DriverManager.getConnection(uri, userid, userpw);
stmt = con.createStatement();
rs = stmt.executeQuery(query);
List<Member> list = new ArrayList<>(); //DTO
while(rs.next()) {
list.add(new Member(rs.getString("userid"),
rs.getString("username"),
rs.getInt("age")));
}
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(con != null) con.close();
for(Member member: list)
System.out.println("ID: " + member.getUserid() +
"\nNAME:" + member.getUsername() +
"\nAGE: " + member.getAge());
}
}
์ฝ๋๋ฅผ ํ๋ํ๋ ์ดํด๋ณด์.
๋จผ์ ์ฐ๊ฒฐ ์ ๋ณด๋ค์ ์ค์ ํด์ฃผ๊ณ , Connection, Statement, ResultSet์ ๋ณ์๋ก ์ ์ธํด ์ค๋ค.
String uri = "jdbc:mysql://localhost:3306/webdev"; //๋ฐ์ดํฐ๋ฒ ์ด์ค url
String userid = "webmaster"; //์ฌ์ฉ์ ์ด๋ฆ
String userpw = "12345"; //์ํธ
String query = "select userid, username, age from tbl_test order by userid"; //์ฟผ๋ฆฌ๋ฌธ
Connection con; //Connection ๋ณ์ ์ ์ธ
Statement stmt; //Statement ๋ณ์ ์ ์ธ
ResultSet rs; //ResultSet ๋ณ์ ์ ์ธ
๊ทธ๋ผ ์ด์ JDBC ๋๋ผ์ด๋ฒ๊ฐ ๋ก๋ํด์ผ ํ๋ค. JDBC ๋๋ผ์ด๋ฒ๋
MariaDB๋ฉด Class.forName("org.mariadb.jdbc.Driver");
MySQL์ด๋ฉด Class.forName("com.mysql.jdbc.Driver");
Oracle์ด๋ฉด Class.forName("oracle.jdbc.driver.OracleDriver");
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
Class.forName("org.mariadb.jdbc.Driver"); //JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ํ์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์๊น ์ค์ ํ ์ฐ๊ฒฐ ์ ๋ณด๋ค์ ์ ๋ฌํ๋ค. ์ ๋ฌํ ๋๋ Connection ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค. DriverManager.getConnection(๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งํฌ, ์ฌ์ฉ์์ด๋ฆ, ์ํธ)๋ก Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
con = DriverManager.getConnection(uri, userid, userpw);
์ด๋ ๊ฒ ํ๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๋ธ ์ ๋ณด๋ค๋ก ์ ์์ด ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋ ํ์๋ Statement ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค. ์ด๋, Connection ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ .createStatement() ๋ฉ์๋๋ฅผ ํตํด ์์ฑํ ์ ์๋ค.
stmt = con.createStatement();
๊ทธ๋ผ ์ด์ Statement ๊ฐ์ฒด๋ฅผ ํตํด SQL๋ฌธ์ ์คํํ ์ ์๋ค. SQL๋ฌธ๊ณผ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๋ผ ์คํํด์ผ ํ๋ ๋ฉ์๋๊ฐ ๋ค๋ฅด๋ค.
์ ์ผ ๋ง์ด ์ฐ์ด๋ ๋ฉ์๋๋ง ๋ช ๊ฐ ์๊ฐํ์๋ฉด,
-SELECT ๋ฌธ์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ executeQuery()
-INSERT, UPDATE, DELETE๋ฌธ(DML๋ฌธ)์ ์คํํ๊ณ ๋ณ๊ฒฝ๋ ํ์ ์๋ฅผ ๋ฐํํ๋ executeUpdate() -> ๋ฐํ์ int๊ฐ
-SELECT๋ฌธ์ด๋ DML, DDL๋ฌธ์ ์คํํ ๋ execute() -> SELECT๋ฌธ์ด๋ฉด true ๋ฐํ, DML, DDL๋ฌธ์ด๋ฉด false ๋ฐํ
์ ์์์์๋ select๋ฌธ์ด๊ณ selectํ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ executeQuery()๋ฅผ ์ฌ์ฉํ๋ค.
rs = stmt.executeQuery(query);
๊ทธ๋ผ ์ด์ ResultSet ๊ฐ์ฒด์์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์์ผ ํ๋ค.
์ฐ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ list๋ฅผ ํ๋ ์ ์ธํด ์ค๋ค. (Member ๊ฐ์ฒด์ ์๋ ์ ๋ณด๋ค์ ๋ฐ์์ค๋ฏ๋ก List ํ์ ์ Member ๊ฐ์ฒด๋ก ํด์ค๋ค)
List<Member> list = new ArrayList<>(); //DTO
์ด์ ๊ทธ list์ rs์ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฃ์ด์ค๋ค. Member ๊ฐ์ฒด๋ก ๋ฐ์์ผ ํ๋ฏ๋ก ๋ฃ์ ๋๋ง๋ค Member ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ list์ ์ถ๊ฐํ๋ค.
while(rs.next()) {
list.add(new Member(rs.getString("userid"),
rs.getString("username"),
rs.getInt("age")));
}
next() ๋ฉ์๋๋ ๋ค์ ํ์ผ๋ก ์ด๋ํด์ ๋ค์ ํ์ด ์กด์ฌํ๋ฉด true, ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
๋ฐ์ดํฐ๋ฅผ list์ ๋ค ๋ฐ์์ผ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ง๊ธฐ ์ํด ResultSet, Statement, Connection ๊ฐ์ฒด๋ฅผ ๋ซ์์ค๋ค.
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(con != null) con.close();
๊ฐ์ฒด๊ฐ null์ด๋ฉด ๋ซ์ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ null์ด ์๋ ๊ฒฝ์ฐ์๋ง close() ๋ฉ์๋๋ก ๋ฆฌ์์ค๋ฅผ ํด์ ํด ์ค๋ค.
์ด์ list์ ์ ๋ด๊ฒผ๋์ง ํ์ธ์ ํด๋ณด๋ฉด
for(Member member: list)
System.out.println("ID: " + member.getUserid() +
"\nNAME:" + member.getUsername() +
"\nAGE: " + member.getAge());
์ด๋ ๊ฒ list์ ์ ๋ณด๊ฐ ์ ๋ด๊ธด ๊ฒ์ ํ์ธํ ์ ์๋ค.
'๐ฅ๏ธ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] HashSet์ด๋? (0) | 2023.06.08 |
---|---|
[Java] Servlet๊ณผ JSP์ ์ญ์ฌ (0) | 2023.04.17 |
[Java] ์๋ฐ๋ฅผ ํ๋ค๋ฉด ์์์ผ ํ๋ ์ฉ์ด๋ค (0) | 2023.04.14 |
[Java] Chapter04: ๋๋ง์๊ธฐ ๊ฒ์ (Word Chain) (0) | 2023.04.10 |
[Java] final()๊ณผ public static final (0) | 2023.04.09 |