๐งถ Spring | Spring Boot/Spring Data JPA
Java๋ก JDBC ์ฌ์ฉํ๊ธฐ
- -
๐ ์ด ๊ธ์ ์ฝ๊ธฐ ์ ์ JDBC ๊ด๋ จ ์๋ฃ๋ฅผ ์ฝ๊ณ ์ค๋ฉด ์ข์ต๋๋ค!
JDBC๋?
- Java Database Connectivity
- ์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์๋ฐ API
์ค๋น๋ฌผ
- DB ๋ฒค๋๋ณ ์ปค๋ฅํฐ ํ์
- MariaDB : https://mariadb.com/kb/en/about-mariadb-connector-j/
- MySQL : https://dev.mysql.com/downloads/connector/j/
- Oracle : https://www.oracle.com/kr/database/technologies/appdev/jdbc.html
- ์ธํ
๋ฆฌ์ ์ด์ ๊ฒฝ์ฐ, Project Structure → Libraries → ๋ค์ด๋ฐ์ ์ปค๋ฅํฐ ์ถ๊ฐ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
- ํ์ Maven์ด๋ Gradle ์ฐ๋ฉด ๊ตณ์ด ์ฌ์ดํธ ๋ค์ด๊ฐ์ ๋ค์ด๋ฐ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฃ์ ํ์์์ด ์ ์ฅ์ ๊ฒ์ํด์ ๋ค์ด๋ฐ์ผ๋ฉด ๋ฉ๋๋ค.
JDBC ์์ ๐จ
- JDBC ๋๋ผ์ด๋ฒ ๋ก๋
- Class.forName(”๋๋ผ์ด๋ฒ ๊ฒฝ๋ก”)
- Java Reflection์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ ์ค ํ๋
- JVM์ ํ๋ผ๋ฏธํฐ๋ก ์ฃผ์ด์ง ์ด๋ฆ๊ณผ ๊ฐ์ ํด๋์ค๋ฅผ JVM์ ๋ก๋ฉ์ํจ๋ค.
- ๋๋ผ์ด๋ฒ ๊ฒฝ๋ก๋ ๋ฒค๋๋ณ๋ก ๋๋ผ์ด๋ฒ๊ฐ ์ ์ฅ๋ ๊ฒฝ๋ก๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ์ธํด๋ณด๊ณ ์ฌ์ฉ
- MariaDB : org.mariadb.jdbc.Driver
- MySQL : com.mysql.cj.jdbc.Driver
- Oracle : oracle.jdbc.driver.OracleDriver
- Class.forName(”๋๋ผ์ด๋ฒ ๊ฒฝ๋ก”)
- DB Connection ์์ฑ
- DriverManager.getConnection(”url”,”id”,”password”)
- DriverManager
- DB ๋๋ผ์ด๋ฒ๋ค์ ๊ด๋ฆฌ,๋ก๋ฉํ๊ณ , DB์ ์ฐ๊ฒฐ์ ์ฑ ์์ง๋ ํด๋์ค
- ์ฌ์ฉํ ๋๋ผ์ด๋ฒ๋ ๋๋ผ์ด๋ฒ ๋งค๋์ ๊ฐ ๋๋ผ์ด๋ฒ๋ฅผ ๊ตฌ๋ํ๊ธฐ ์ ์ ๋ฑ๋ก๋์ด์ผ ํ๋ค.
- new Driver() ์์ด๋ DriverManager๊ฐ ๋๋ผ์ด๋ฒ๋ฅผ ๊ตฌ๋ํ ์ ์๋ ์ด์ ๋ Class.forName์ผ๋ก ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ํ ๋, ์ด๋ฏธ DriverManager์ ๋ฑ๋ก๋๊ธฐ ๋๋ฌธ์ด๋ค.
Drive ํด๋์ค ๋ด๋ถ ์ฝ๋
- new Driver() ์์ด๋ DriverManager๊ฐ ๋๋ผ์ด๋ฒ๋ฅผ ๊ตฌ๋ํ ์ ์๋ ์ด์ ๋ Class.forName์ผ๋ก ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ํ ๋, ์ด๋ฏธ DriverManager์ ๋ฑ๋ก๋๊ธฐ ๋๋ฌธ์ด๋ค.
- DriverManager
- DriverManager.getConnection(”url”,”id”,”password”)
- SQL์ ์ํ Statement ๊ฐ์ฒด ์์ฑ
- Statement
- ์ฟผ๋ฆฌ๋ฅผ ๋ด์ ์ ๋ฌํ ๊ทธ๋ฆ
- ์ข
๋ฅ
- Statement
- ๋จ์ผ๋ก ์ฌ์ฉํ ๋ ๋น ๋ฅธ ์๋๋ฅผ ์ง๋
- ๋งค๋ฒ ์ปดํ์ผ์ ์ํํด์ผ ํจ
- ์ฟผ๋ฆฌ์ ์ธ์๋ฅผ ๋ถ์ฌํ ์ ์์
- ์ทจ์ฝ์ ์ด ์์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๊ถ๊ณ ๋์ด์ง
- String sql = "SELECT name, class FROM player"; Statement stmt = conn.createStatement(); ResultSet rs = s.executeQuery(sql);
- PreparedStatement
- ์ฃผ๋ก ์ฌ์ฉํ๋ statement
- ์ฌ๋ฌ๋ฒ ์ํ๋ ๋ ๋น ๋ฅธ ์๋๋ฅผ ์ง๋
- ์ฒ์ ํ๋ฆฌ ์ปดํ์ผ ๋ ํ, ์ปดํ์ผ์ ์ํํ์ง ์์
- ์ฟผ๋ฆฌ์ ์ธ์ ๋ถ์ฌ ๊ฐ๋ฅ ( = ๋์ ์ฟผ๋ฆฌ ๊ฐ๋ฅ)
- sql๋ฌธ์ ?๋ฅผ ์ด์ฉํด์ setXXX()๋ฅผ ํตํด ์ํ๋ ๊ฐ์ ๋ฃ์ ์ ์์
- ?๋ ์์์๋ถํฐ 1,2,3~ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง
String sql = "UPDATE player SET name = ?, position = ? where name = ?; "; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "ํ ๋ฆฌ"); pstmt.setString(2, "๊ณต๊ฒฉ์"); pstmt.setString(3, "์ด์ฝ"); ps.executeQuery();
- CallableStatement
- PreparedStatement + ํ๋ก์์ ํธ์ถ ๊ฐ๋ฅ
- Statement
- Statement
- SQL ๋ฌธ์ฅ ์คํ
- Execute
- execute()
- ๋ชจ๋ ๊ตฌ๋ฌธ ์ํ ๊ฐ๋ฅ
- Boolean ๊ฐ ๋ฐํ
- ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ๊ฐ ResultSet ์ผ ๊ฒฝ์ฐ true, ์๋ ๊ฒฝ์ฐ false
- executerQuery()
- ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ๋ฅผ ResultSet์ ๋ด์์ ๋ฐํ
- ์ฃผ๋ก Select ๋ฌธ์ ์ฌ์ฉ
- executeUpdate()
- INSERT, UPDATE, DELETE ๋ CREATE, DROP ๋ฑ์ ์คํํ๋๋ฐ ์ฌ์ฉ
- ์ํฅ์ ๋ฐ์ ํ ์๋ฅผ ๋ฐํ
- execute()
- Execute
- SQL ์คํ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
- ResultSet
- ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํ ์ด๋ธ ํ์์ผ๋ก ์ ์ฅํ ์ธ์คํด์ค
- ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌํ์ผ ๊ฒฝ์ฐ ํ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ๋๋ฌธ์, ๋ด๋ถ์ ์ผ๋ก ์ปค์๋ฅผ ์ด์ฉํด์ ๊ฐ์ ธ์จ๋ค.
- ResultSet.next()
- ์ปค์๋ฅผ ๋ค์ํ์ผ๋ก ์ด๋ํ๋ ๋ฉ์๋
- ๋ฐํ๊ฐ์ Boolean (์ปค์ ์์น์ ์ฒ๋ฆฌํ ํ์ด ์์ผ๋ฉด true, ์์ผ๋ฉด false)
- ResultSet.getXXX(int ์ปฌ๋ผ ์์น), ResultSet,getXXX(String ์ปฌ๋ผ๋ช
)
- ์ปค์ ์์น์ ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋
- ๋ณดํต ์ปฌ๋ผ๋ช ์ ๋งค๊ฐ๋ณ์๋ก ํ๋ ๊ฒ์ ์ฌ์ฉํ๋ค.
- ResultSet.next()
- ResultSet
- JDBC ๊ฐ์ฒด ์ฐ๊ฒฐ ํด์
- ResultSet ํด์
- Statement ํด์
- Connection ํด์
์์
import java.sql.*;
public class JDBC {
public static void main(String[] args) {
String url = "jdbc:mariadb://localhost:3306/practice";
String user = "admin";
String password = "test";
try {
// 1. ๋๋ผ์ด๋ฒ ๋ก๋
Class.forName("org.mariadb.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// ๋์ค์ ์ค๋ฅ ๋ฑ์ผ๋ก try๋ฌธ์ด ์ข
๋ฃ๋๋๋ผ๋ finally์์ jdbc๊ฐ์ฒด๋ค์ ํด์ ํ ์ ์๋๋ก ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธ
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 2. Connection ๊ฐ์ฒด ์์ฑ
conn = DriverManager.getConnection(url, user, password);
// 3. Statement ๊ฐ์ฒด ์์ฑ
String sql = "SELECT * FROM player WHERE position = ?;";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "๊ณต๊ฒฉ์");
// 4. ์ฟผ๋ฆฌ ์คํ
rs = pstmt.executeQuery();
// 5. ๊ฒฐ๊ณผ ์ํ
while (rs.next()) {
String name = rs.getString("name");
String pos_name = rs.getString("position");
System.out.println(name + " / " + pos_name);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
// 6. JDBC ๊ฐ์ฒด ์ฐ๊ฒฐ ํด์
if (rs != null && !rs.isClosed()) {
rs.close();
}
if (pstmt != null && !pstmt.isClosed()) {
pstmt.close();
}
if (conn != null && !conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
'๐งถ Spring | Spring Boot > Spring Data JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA Persistence(์์์ฑ, ์ ๋ฐ์ ์ธ ๊ธฐ๋ณธ ๊ฐ๋ ์ค๋ช ) (0) | 2022.10.25 |
---|---|
JPA๋? (0) | 2022.10.24 |
Spring JDBC Template ์ฌ์ฉ๋ฒ (0) | 2022.10.21 |
JDBC / SQL Mapper / ORM (0) | 2022.10.21 |
Contents
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค