ํ์ต ๋ด์ฉ
Eclipse์ Oracle์ ์ฐ๋ํ JDBC
- JDBC (Java DataBase Connectivity)
์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๋๋ก ํ๋ ์๋ฐ API์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฐ๋ ๋ฐฉ๋ฒ
1. JdbcConnect ํด๋์ค (์์) ์์ฑ
2. ๊ธฐ๋ณธ ์์ฑ์๋ก JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ฉํ ์ ์๋ try, catch๋ฌธ ์์ฑ (์ฃผ์ ์ฐธ๊ณ )
3. java.sql ์ ์ํด์๋ Connection ํด๋์ค์ getConnection() ๋ฉ์๋๋ฅผ ํตํด ํด๋น url์ ๊ฐ์ฒด ์์ฑ
4. getConnection()์ ์ ๋ ฅํ url ์ฃผ์๋ ์๋์ ๊ฐ์ด ์ฐพ์ ์ ์๋ค.
5. Main ๋ฉ์๋์์ ์ธ์คํด์ค ์์ฑ ํ ์ ์์ด ๋๋์ง ํ์ธ
JdbcConnect ํด๋์ค
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcConnect {
public JdbcConnect() { // JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); //Class.forName()์ ์ด์ฉํด์ Driver Class๋ฅผ ๋ก๋ฉํ๋ฉด ๊ฐ์ฒด๊ฐ ์์ฑ
System.out.println("Driver loading Success");
} catch (ClassNotFoundException e) { //Driver ํด๋์ค๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ, ClassNotFoundException ์์ธ๊ฐ ๋ฐ์
System.out.println("Driver๊ฐ ์์ต๋๋ค.");
}
}
public Connection getConnection() {
Connection conn = null; //Connection - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๊ฐ์ฒด
try {
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:xe", "hr", "hr");
//DriverManager.getConnection(์ฐ๊ฒฐ๋ฌธ์์ด, DB_ID, DB_PW) ์ผ๋ก Connection ๊ฐ์ฒด๋ฅผ ์์ฑ
System.out.println("Oracle Connection Success");
} catch(SQLException e) {
System.out.println("DB๋ฅผ ์ฐ๊ฒฐํ์ง ๋ชปํ์ต๋๋ค.");
}
return conn;
}
}
Main ํด๋์ค
package jdbcConnecttion;
import jdbc.JdbcConnect;
public class MainClass {
public static void main(String[] args) {
JdbcConnect jc = new JdbcConnect();
jc.getConnection();
}
}
์คํ ๊ฐ :
Driver loading Success
Oracle Connection Success
- JDBC๋ฅผ ํตํ DML ๊ตฌํ
1. insert ํด๋์ค ( delete, update๋ ๋น์ทํ๋ค.)
์์ ์ ์ด๋ ๊ธฐ๋ณธ ์ฐ๋์ ํด๋๊ณ insertData() ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
์์ฑ ์ ์ฃผ์ํ ์
1. sql ์ฟผ๋ฆฌ๋ฌธ ์์ฑ ์์ ํฐ๋ฐ์ดํ์ ์ฒ์๊ณผ ์์ ํ์นธ์ฉ ๋์์ฃผ๋ ์ต๊ด์ ๊ฐ๋๋ค.
(ํธ์์ ๊ฐํ๋์ด ์์ฑ๋ ์ฟผ๋ฆฌ๊ฐ ์ด์ ํ์ ์ฟผ๋ฆฌ์ ๋ง๋ถ์ผ๋ฉด ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ)
2. ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ์๋ฃํ๊ณผ DB์์ ์ ์ฅ๋ ์ปฌ๋ผ์ ์๋ฃํ์ ๋ง์ถฐ์ค๋ค.
(์๋ ์์๋ DB์ id, ์ด๋ฆ, ๋์ด, ๋ฑ๋ก์ผ(SYSDATE)๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ id, ์ด๋ฆ, ๋์ด๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ์์ค๋ค.)
3. Connection conn = getConnection(); ์
Statement stmt = null; ์ DB์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋ฌด์กฐ๊ฑด ํ์ํ ๊ณผ์ ์ด๋ค. (๊ทธ๋ฅ ์ธ์ฐ์)
์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํด try, catch๋ฌธ์ผ๋ก ์์ฑํ๋ค.
insert, delete, update ๋ฌธ์ ๋ชจ๋ ์ฐ์ธ๋ค. ( ์ฐธ๊ณ ๋ก select๋ ํ๋ ๋ ์๊ธฐ์ ๋ค์ ์์ ๋ ์์ฑํ๋ค.)
4. ์์ try, catch๋ฌธ์ finally๋ฌธ(์์ธ์ ์๊ด์์ด ์คํ์ด ๋ณด์ฅ๋๋ ๊ตฌ๋ฌธ)์ ์ถ๊ฐํ์ฌ ๊ทธ ์์ DB๋ฅผ ๋ซ์์ฃผ๋
close() ๋ฉ์๋๋ฅผ ๋ค์ ํ๋ฒ try, catch๋ฌธ์ผ๋ก ์์ฑํด์ค๋ค. (๋ฐ๋์ ๋ซ์์ฃผ๋ ์ต๊ด์ ๊ฐ์ง๋ค.)
5. executeUpdate() : INSERT / DELETE / UPDATE ๊ด๋ จ ๊ตฌ๋ฌธ์์๋ ๋ฐ์๋ ๋ ์ฝ๋์ ๊ฑด์๋ฅผ ๋ฐํ.
CREATE / DROP ๊ด๋ จ ๊ตฌ๋ฌธ์์๋ -1 ์ ๋ฐํ.
InsertTest ํด๋์ค
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertTest {
public InsertTest() { // JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ (์์ฑ์) ๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋นํ ๋ด์ฉ
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); //Class.forName()์ ์ด์ฉํด์ Driver Class๋ฅผ ๋ก๋ฉ
//๋ฌผ๋ฆฌ์ ์ธ ํด๋์ค ํ์ผ๋ช
์ ์ธ์๋ก ๋ฃ์ด์ฃผ๋ฉด ์ด์ ํด๋นํ๋ ํด๋์ค๋ฅผ ๋ฐํํด์ค๋ค. ํด๋์ค๋ฅผ ์กฐ์ฌํ๊ธฐ ์ํ ํด๋์ค.
//๋ณ์๋ก ํด๋์ค๋ฅผ ๋ง๋ค๋ Class.forName ์ ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค.
System.out.println("Driver loading Success");
} catch (ClassNotFoundException e) { //Driver ํด๋์ค๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ, ClassNotFoundException ์์ธ๊ฐ ๋ฐ์
System.out.println("Driver๊ฐ ์์ต๋๋ค.");
}
}
public Connection getConnection() { //๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๋ฉ์๋
Connection conn = null; //Connection - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ํด๋์ค
try {
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:xe", "hr", "hr");
//DriverManager.getConnection(url, user, password) ์ผ๋ก Connection ๊ฐ์ฒด๋ฅผ ์์ฑ
//์ง์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ URL์์ ์ ์์ ์๋ํ๋ค. DriverManager๋ ๋ฑ๋ก๋ JDBC ๋๋ผ์ด๋ฒ์ ์งํฉ์ผ๋ก๋ถํฐ ์ ์ ํ ๋๋ผ์ด๋ฒ๋ฅผ ์ ํํ๋ ค๊ณ ํ๋ค.
System.out.println("Oracle Connection Success");
} catch(SQLException e) {
System.out.println("DB๋ฅผ ์ฐ๊ฒฐํ์ง ๋ชปํ์ต๋๋ค.");
}
return conn;
}
public int insertData(String id, String name, int age) {
// Query(String) ์ค๋น
String sql = " INSERT INTO USERTEST(ID, NAME, AGE, JOINDATE) "
+ " VALUES('" +id+ "','" +name+ "'," +age+ ", SYSDATE)"; // String ์์๋ฐ์ดํ ์ฃผ์
System.out.println(sql); //ํ์ธ์ฉ
// DB Connection
Connection conn = getConnection(); // DB์ ์ฐ๊ฒฐํ ์ธ์คํด์ค conn ์์ฑ
Statement stmt = null; // Statement ํด๋์ค -> SQL ๊ตฌ๋ฌธ์ ์คํํ๋ ์ญํ , ์ค์ค๋ก๋ SQL ๊ตฌ๋ฌธ ์ดํด ๋ชปํจ(๊ตฌ๋ฌธํด์ X) -> ์ ๋ฌ์ญํ
int count = 0;
// DB Processing
try {
stmt = conn.createStatement(); // createStatement() : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก SQL ๋ฌธ์ ๋ณด๋ด๊ธฐ ์ํ SQLServerStatement ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
count = stmt.executeUpdate(sql); // executeUpdate() : sql ์ฟผ๋ฆฌ ๋ฌธ์ฅ ์คํ
System.out.println("์ฑ๊ณต์ ์ผ๋ก ์ถ๊ฐ ๋์์ต๋๋ค.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
// DB Close
try {
if(stmt != null) {
stmt.close();
}
if(conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return count;
}
}
Main ํด๋์ค
package main;
import jdbc.InsertTest;
public class MainClass {
public static void main(String[] args) {
InsertTest it = new InsertTest();
int count = it.insertData("abc", "ํ๊ธธ๋", 24);
if(count == 1) {
System.out.println("๋ฐ์ดํฐ๊ฐ " +count+ "๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.");
} else {
System.out.println("๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋์ง ์์์ต๋๋ค.");
}
}
}
2. select ํด๋์ค (์ฃผ์ ๊ผผ๊ผผํ๊ฒ ๋ณผ ๊ฒ)
์๋๋ '๋์ด'๋ฅผ ์ ๋ ฅ ๊ฐ์ผ๋ก ๋ฐ์ '์ ๋ ฅ ๊ฐ ์ด์์ ๋์ด'๋ฅผ ๊ฐ์ง ํํ์ ๊ฐ์ ธ์ ์ถ๋ ฅํด์ฃผ๋ ํด๋์ค์ด๋ค.
์ด 5๊ฐ์ ํด๋์ค๋ก ๋๋ ์์ฑํ์ผ๋ฉฐ, ํ ์ค๋ง๋ค ์ฃผ์์ผ๋ก ์์ธํ ์ค๋ช ํด๋จ๊ณ , ์์ฃผ ์ค์ํ ๋ถ๋ถ์ด๋ฏ๋ก ์์๋ก ๋ณด๋ฉด์ ์๋ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ํฐ๋ํ์.
ํด๋์ค : MainClass : ๋ฉ์ธํด๋์ค
UserDto : DB์ ๋ง๋ ์ ์ Dto ํด๋์ค
DBConnection : DB์ ์ฐ๊ฒฐํ๋ ํด๋์ค (Static ๋ฉ์๋๋ก ์์ฑ)
DBClose : DB ์ฐ๊ฒฐ์ ๋ซ์์ค ํด๋์ค (Static ๋ฉ์๋๋ก ์์ฑ)
SelectTest : ์ฟผ๋ฆฌ๋ฌธ์ ํตํ DB Select ํด๋์ค
MainClass
package main;
import java.util.List;
import db.DBConnection;
import dto.UserDto;
import jdbc.SelectTest;
public class MainClass {
public static void main(String[] args) {
DBConnection.initConnection(); //๊ธฐ๋ณธ์ ์ธ JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
SelectTest st = new SelectTest(); // select ํด๋์ค ์ธ์คํด์ค st ์์ฑ
int age = 17;
List<UserDto> list = st.select(age); //UserDto๋ฅผ ๋ด์ ArrayList ์์ฑํ์ฌ '?์ธ ์ด์'์กฐ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ select()๋ฉ์๋ ๋ฆฌํด๊ฐ ๋ฐ์
for (int i = 0; i < list.size(); i++) { // ๋ฐ์ดํฐ ์ถ๋ ฅ์ฉ for๋ฌธ
UserDto u = list.get(i);
System.out.println(u.toString());
}
}
}
UserDto
package dto;
public class UserDto { // DB ์ปฌ๋ผ๊ฐ์ธ ID, ์ด๋ฆ, ๋์ด, ์์ฑ์ผ Dto ์์ฑ
private String id;
private String name;
private int age;
private String joindate;
public UserDto() {
}
public UserDto(String id, String name, int age, String joindate) {
super();
this.id = id;
this.name = name;
this.age = age;
this.joindate = joindate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJoindate() {
return joindate;
}
public void setJoindate(String joindate) {
this.joindate = joindate;
}
@Override
public String toString() {
return "UserDto [id=" + id + ", name=" + name + ", age=" + age + ", joindate=" + joindate + "]";
}
}
DBConnection
package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
public static void initConnection() { //๊ธฐ๋ณธ์ ์ธ JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("Driver load ์ฑ๊ณต");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace(); // ๊ทผ์์ง๋ฅผ ์ฐพ์์ ๋จ๊ณ๋ณ๋ก ์๋ฌ๋ฅผ ์ถ๋ ฅ
System.out.println("Driver๊ฐ ์์ต๋๋ค");
}
}
public static Connection getConnection() { // Connection - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ํด๋์ค
Connection conn = null; // ์๋ฃํ์ด Connection์ธ conn ์ด๊ธฐํ
try {
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr" , "hr");
//DriverManager : JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ์๋น์ค
//DriverManager์์ ์๋จ URL๋ก ์ ์ํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
System.out.println("Oracle Connection ์ฑ๊ณต");
} catch(SQLException e) {
System.out.println("Oracle ์ฐ๊ฒฐ ์คํจ");
}
return conn;
}
}
DBClose (ํ์ํ ์ด์ ๋ฅผ ์ฃผ์์ ๋ฌ์๋จ์ผ๋ ๊ผญ ์ฐธ๊ณ ํ ๊ฒ)
package db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBClose {
/* **close๊ฐ ํ์ํ ์ด์ **
1. Statement๋ฅผ ๋ซ์ง ์์ ๊ฒฝ์ฐ, ์์ฑ๋ Statement์ ๊ฐ์๊ฐ ์ฆ๊ฐํ์ฌ ๋ ์ด์ Statement๋ฅผ ์์ฑํ ์ ์๊ฒ ๋๋ค.
2. close() ํ์ง ์์ผ๋ฏ๋ก ๋ถํ์ํ ์์(๋คํธ์ํฌ ๋ฐ ๋ฉ๋ชจ๋ฆฌ)์ ๋ญ๋นํ๊ฒ ๋๋ค.
3. ์ปค๋ฅ์
ํ์ ์ฌ์ฉํ์ง ์๋ ์ํฉ์์ Connection์ ๋ซ์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ์ DBMS์ ์ฐ๊ฒฐ๋ ์๋ก์ด Connection์ ์์ฑํ ์ ์๊ฒ ๋๋ค.
์ฒซ๋ฒ์งธ์ ๋๋ฒ์งธ ๋ฌธ์ ๋ ์๊ฐ์ด ์ง๋๋ฉด ๊ฐ๋น์ง ์ฝ๋ ํฐ์ ์ํด์ ํด๊ฒฐ๋ ์๋ ์์ง๋ง, ๋ง์ฝ ์ปค๋ฅ์
ํ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๊ทธ๋๋ง ๊ฐ๋น์ง ์ฝ๋ ์
๋ ๋์ง ์๋๋ค.
๋ฐ๋ผ์ ์ปค๋ฅ์
ํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Statement์ ResultSet์ ๋ฐ๋์ ๋ซ์์ฃผ์ด์ผ๋ง ํ๋ค.
*/
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if(conn != null) {
conn.close();
}
if(stmt != null) {
stmt.close();
}
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
SelectTest
package jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import db.DBClose;
import db.DBConnection;
import dto.UserDto;
public class SelectTest {
public List<UserDto> select(int age) {
String sql = " SELECT * "
+ " FROM USERTEST "
+ " WHERE AGE >= ? ";
System.out.println(sql);
Connection conn = DBConnection.getConnection(); // DBConnection ํด๋์ค์ getConnection ๋ฉ์๋๋ก ์ธ์คํด์ค conn ์์ฑ
// URL๋ก ์ ์ํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฉ์๋
PreparedStatement psmt = null; // PreparedStatement : SQL ๊ตฌ๋ฌธ์ ์คํํ๋ ์ญํ , Statement ํด๋์ค์ ๊ธฐ๋ฅ ํฅ์
ResultSet rs = null; //ResultSet : ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅ, ์ ์ฅ๋ ๊ฐ์ ํ ํ ๋จ์๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค.
List<UserDto> list = new ArrayList<UserDto>(); // DB๋ฅผ ๋ฃ์ด์ค ArrayList ์์ฑ
try {
psmt = conn.prepareStatement(sql); // url์ ์ํ conn์ ์์ ์์ฑํ sql ๊ตฌ๋ฌธ ์คํ
psmt.setInt(1, age);
rs = psmt.executeQuery(); // executeQuery() : DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ฒฐ๊ณผ ์งํฉ์ ๋ฐํ, select๋ฌธ์์๋ง ์คํํ๋ค.
// ๋ฐํ ๊ฐ : ResultSet ( ๊ฒฐ๊ณผ ์ถ๋ ฅ์ฉ )
while(rs.next()) { // ๊ฒฐ๊ณผ๊ฐ 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ : while (1๊ฐ๋ฉด if๋ฌธ)
// next() : ๋ค์ํ์ด ์์ ๊ฒฝ์ฐ TRUE๋ฅผ ๋ฐํํ๊ณ , ์์ ๊ฒฝ์ฐ FALSE๋ฅผ ๋ฐํ
// rs์ ์ ์ฅ๋์๋ DB๋ฅผ ๊ฐ์ ธ์์ ๋ฑ๋กํ๋ ๊ณผ์
String id = rs.getString(1); // DB์ ์ปฌ๋ผ ์ด๋ฆ์ ํฐ๋ฐ์ดํ ์์ ์์ฑ
String name = rs.getString("name"); // ํฐ๋ฐ์ดํ ์์ด ์ซ์ ์
๋ ฅ => ํ
์ด๋ธ ์ปฌ๋ผ ์์ฑ ์์๋๋ก (์๋ฃํ์ ๋ง์ถฐ์ค์ผ ํ๋ค.)
age = rs.getInt(3);
String joindate = rs.getString("joindate");
UserDto dto = new UserDto(id, name, age, joindate);
list.add(dto);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return list;
}
}
'๐ป ๊ฐ๋ฐ > ๐ TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
21.03.02 TIL(D+34 JavaScript) (0) | 2021.03.02 |
---|---|
21.02.22 TIL(D+29 JDBC ํ์ฉ AccountBook ๋ง๋ค๊ธฐ) (0) | 2021.02.22 |
21.02.18 TIL (D+27 ORACLE PL/SQL) (0) | 2021.02.18 |
21.02.16 TIL (ORACLE SUB QUERY, JOIN, TABLE, DDL, DML, ๋ฌด๊ฒฐ์ฑ) (0) | 2021.02.16 |
21.02.09 TIL (D+22 Oracle Select) (0) | 2021.02.09 |