์๋ฐ(Java) - JDBC(Oracle) : ์ด๋ก (?)
JDBC
- Java ์ธ์ด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํ API
- JDBC๋ฅผ ์ด์ฉํ์ฌ Java ์ธ์ด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ๊ณ SQL๋ฌธ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์์
- JDBC API ์ด์ฉ์ DBMS ์ข ๋ฅ์ ์๊ด์์ด ํ๋์ ๋ฐฉ๋ฒ์ผ๋ก ์์ ์งํ ๊ฐ๋ฅ
JDBC ์ฌ์ฉ ๊ฐ์ฒด
๋๋ผ์ด๋ฒ ๋ก๋
๐ ๋ฐ์ดํฐ ์๋ณธ์ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ํตํ์ฌ ์ปค๋ฅ์ ์ ๋ง๋๋ ์ญํ
๐ Class.forName() ๋ฉ์๋๋ฅผ ํตํด ์์ฑ๋๋ฉฐ ๋ฐ๋์ ์์ธ์ฒ๋ฆฌ ํด์ผํจ.
๐ ์ง์ ๊ฐ์ฒด ์์ฑ์ด ๋ถ๊ฐ๋ฅํ๊ณ getConnection() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํจ.
- Class.forName() : ์ฌ์ฉํ๊ณ ์ ํ๋ JDBC ๋๋ผ์ด๋ฒ๋ฅผ ์ง์ , ํด๋น ๋๋ผ์ด๋ฒ ๋ด๋ถ์ ์๋ ํด๋์ค๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
๋ฐ์ดํฐ๋ฒ ์ด์ค(D/B) ์ฐ๊ฒฐ
- ํน์ ๋ฐ์ดํฐ ์๋ณธ๊ณผ ์ฐ๊ฒฐ๋ ์ปค๋ฅ์ ์ ๋ํ๋ด๋ฉฐ Statement ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ Connection์ ์ฌ์ฉํ์ฌ createStatement() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ฑ
- SQL ๋ฌธ์ฅ์ ์คํ์ํค๊ธฐ ์ ์ ์ฐ์ Connection ๊ฐ์ฒด๊ฐ ์์ด์ผ ํจ!
SQL๋ฌธ ์ฒ๋ฆฌ
- SQL๋ฌธ์ Statement๋ PreparedStatement ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฌ
- Statement๋ ์ ์ ์ธ SQL๋ฌธ์ ์ฒ๋ฆฌํ๋ฉฐ, PreparedStatement๋ ๋์ ์ธ SQL๋ฌธ์ ์ฒ๋ฆฌํจ
- SQL๋ฌธ์ ์ฒ๋ฆฌํ๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ResultSet ๊ฐ์ฒด์ ์ ์ฅํ๊ฑฐ๋, ์ํฅ์ ๋ฐ์ ๋ ์ฝ๋ ์ ๋ฐํ
์ฐ๊ฒฐ ์ข ๋ฃ
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ด ๋๋๋ฉด ์ฐ๊ฒฐ ์ข ๋ฃํด์ค์ผ ํจ.
JDBC ํ๋ก๊ทธ๋๋ฐ ๊ณผ์
- JDBC ํ๋ก๊ทธ๋๋ฐ์ ์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๊ฒ
- ์น ๋ฟ๋ง ์๋๋ผ ์ผ๋ฐ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์ผํ๊ฒ ์ฌ์ฉ ๊ฐ
JDBC ๋๋ผ์ด๋ฒ ์ค์น
https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html
JDBC and UCP Downloads page | Oracle ๋ํ๋ฏผ๊ตญ
์ฃ์กํฉ๋๋ค. ๊ฒ์ ๋ด์ฉ๊ณผ ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ์ํ์๋ ์ ๋ณด๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋๋๋ก ๋ค์์ ์๋ํด ๋ณด์ญ์์ค. ๊ฒ์์ ์ฌ์ฉํ์ ํค์๋์ ์ฒ ์๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ์ญ์์ค. ์ ๋ ฅ
www.oracle.com
ojdbc11.jar ์ค์น
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฐ๊ฒฐ
๐ก์ธํ ๋ฆฌ์ ์ด ๊ธฐ์ค
File - Project Structure - Project Settings - Libraries - + ์ ํ - ojdbc11 ์ถ๊ฐ - Apply - OK
์ ๊ณผ์ ์ฒ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ผ Connection ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Connection ๊ฐ์ฒด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํด ์์ ์ ์ํํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฐ์ฒด ์ ๋๋ค.
DriverManager ํด๋์ค์ getConnection() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ
Connection ๊ฐ์ฒด ์ป๊ธฐ
final static String ORACLE_URL = "jdbc:oracle:thin:@localhost:1521:xe";
final static String ORACLE_ID = "[์ฐ๊ฒฐํ DB๊ณ์ ID]";
final static String ORACLE_PWD = "[์ฐ๊ฒฐํ DB๊ณ์ PW]";
Connection conn = null; // Connection์ ์์ธ์ฒ๋ฆฌ ํด์ค์ผ ํจ.
conn = DriverManager.getConnection(ORACLE_URL, ORACLE_ID, ORACLE_PWD);
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋๊ธฐ
conn.close();
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ํ ํ ์ค์ SQL๋ฌธ์ ์ํํ๊ธฐ ์ํด์ Statement ๊ฐ์ฒด๋ฅผ ์์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ฌ์ฉํ conn ๊ฐ์ฒด๋ฅผ ํตํด createStatement() ๋ฉ์๋๋ฅผ ํธ์ถํด Statement ๊ฐ์ฒด๋ฅผ ์ป์ด์ฌ ์ ์์
Statement ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช |
executeQuery | select๋ฌธ๊ณผ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ ๋ ์ฝ๋๋ก ๋ฐํ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ |
executeUpdate | insert, update, delete๋ฌธ๊ณผ ๊ฐ์ด ํ ์ด๋ธ ๋ด์์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ํ ๋ฐํํ๋ ๊ฒฐ๊ณผ ๊ฐ์ด ํ์ ๊ฐ์์ธ ๊ฒฝ์ฐ ์ฌ์ฉ |
ResultSet ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช |
next() | ํ์ฌ ํ์์ ํ ํ ์์ผ๋ก ์ด๋ |
previouse() | ํ์ฌ ํ์์ ํ ํ ๋ค๋ก ์ด |
first() | ์ฒซ ๋ฒ์งธ ํ์ผ๋ก ์ด๋ |
last() | ๋ง์ง๋ง ํ์ผ๋ก ์ด๋ |
PreparedStatement
Statement ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ ๊ฒฝ์ฐ ์ฐ๋ํ ๋๋ง๋ค DBMS์์ ๋ค์ SQL๋ฌธ์ ์ปดํ์ผ ํด์ผ ํ๋ฏ๋ก ์๋๊ฐ ๋๋ ค์ง๋ ๋จ์ ์ด ์์ต๋๋ค.
์ด๋ด ๊ฒฝ์ฐ PreparedStatement ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด SQL๋ฌธ์ ๋ฏธ๋ฆฌ ์ปดํ์ผํด์ ์ฌ์ฌ์ฉํ๋ฏ๋ก Statement ์ธํฐํ์ด์ค๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- PreparedStatement ์ธํฐํ์ด์ค๋ Statement ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ฏ๋ก ์ง๊ธ๊น์ง ์ฌ์ฉํ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Statement ์ธํฐํ์ด์ค๊ฐ DBMS์ ์ ๋ฌํ๋ SQL๋ฌธ์ ๋จ์ํ ๋ฌธ์์ด์ด๋ฏ๋ก DBMS๋ ์ด ๋ฌธ์์ด์ DBMS๊ฐ ์ดํดํ ์ ์๋๋ก ์ปดํ์ผํ๊ณ ์คํํฉ๋๋ค. ๋ฐ๋ฉด์ PreparedStatement ์ธํฐํ์ด์ค๋ ์ปดํ์ผ๋ SQL๋ฌธ์ DBMS์ ์ ๋ฌํ์ฌ ์ฑ๋ฅ์ ํฅ์ ์ํต๋๋ค.
* 2.28 ์์ ํ ์ถ๊ฐ ์์
VO(Value Object)
- VO๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์จ ๋ ์ฝ๋๋ฅผ ์๋ฐ ๊ฐ์ฒด๋ก ๋งคํํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- VO ๊ฐ์ฒด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฐ ์ปฌ๋ผ์ ํด๋นํ๋ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ฐ์ต๋๋ค.
- VO ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์จ ๋ ์ฝ๋๋ฅผ ๊ฐ์ฒดํํ์ฌ ๋ค์ํ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ ์ ์์ต๋๋ค.
DAO(Database Access Object)
- DAO๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์์ ํ๋ ๋ฐ ์ฌ์ฉ
- DAO๋ VO ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๋ด๋น, VO๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๋๋ฅผ ์กฐํํ๊ฑฐ๋ ์์
Controller
- ๋ชจ๋ธ(Model)๊ณผ ๋ทฐ(View) ์ฌ์ด์์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ณ , ๋ชจ๋ธ์์ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ์ ๋ฌํ๋ ์ปดํฌ๋ํธ
- ์ผ๋ฐ์ ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉ์์ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ์ ๋ฐ๋ฅธ ์๋ต์ ์์ฑํ๋ ๋ฐ์ Controller ์ฌ์ฉ
์ญํ
- ์์ฒญ ์ฒ๋ฆฌ
Controller๋ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌ, HTTP ์์ฒญ์ ๋ถ์ํ๊ณ , ํด๋น ์์ฒญ์ ๋ํ ์์ ์ํ - ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ
Controller๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌ, Model์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ ์ ํ ๋ฐ์ดํฐ๋ฅผ View์ ์ ๋ฌ - ์๋ต์์ฑ
Controller๋ View์ ํจ๊ป ์ฌ์ฉ์์๊ฒ ์๋ต์ ์์ฑ, View์ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ Model์์ ๊ฐ์ ธ์ View๋ฅผ ๋ ๋๋งํ๊ณ , ์ต์ข ์ ์ผ๋ก HTTP ์๋ต์ ์์ฑ - ๋ผ์ฐํ
Controller๋ URL์ ์ฒ๋ฆฌํ๋ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ์ ๊ณต
URL์ ๋ฐ๋ผ ํด๋น Controller์ ๋์์ ์ํํ๋๋ก ๋ผ์ฐํ - ์๋ฌ ์ฒ๋ฆฌ
Controller๋ ์์ธ ์ํฉ์ ๋ํ ์ฒ๋ฆฌ ์ํ, ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์คํจํ๋ฉด ํด๋น ์์ธ์ ๋ํ ์ฒ๋ฆฌ ์ํ