๐ป/JDBC
(31) [JDBC] 2์ผ์ฐจ : JDBC(Java Data Connectivity)
๋ฐ๊ถ
2024. 4. 3. 08:37
ResultSet
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฐ๊ณผ ์งํฉ์ ๋ํ๋ด๋ ํ ์ด๋ ํ ์ด๋ธ. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กฐํํ๋ ๋ฌธ์ ์คํํ์ฌ ์์ฑ๋๋ค. ResultSet๊ฐ์ฒด๋ ํ์ฌ ๋ฐ์ดํฐ ํ์ ๊ฐ๋ฆฌํค๋ ์ปค์๋ฅผ ์ ์งํ๋ฉฐ, ์ด๊ธฐ์ ์ปค์๋ ์ฒซ ๋ฒ์งธ ํ ์์ ์์นํ๋ค.
PreparedSatement
Statement ํ์ ์ธํฐํ์ด์ค๋ก ํ๋ฆฌ ์ปดํ์ผ(์ ์ฒ๋ฆฌ)๋ SQL๋ฌธ์ ๋ํ๋ด๋ ๊ฐ์ฒด. SQL๋ฌธ์ ํ๋ฆฌ ์ปดํ์ผ ๋์ด PreparedStatement๊ฐ์ฒด์ ์ ์ฅ๋๋ฉฐ, ์ด ๊ฐ์ฒด๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ์ฌ SQL๋ฌธ์ ํจ์จ์ ์ผ๋ก ์คํํ ์ ์๋ค.
- ์ ํ ์ปดํ์ผ ์ด๋ฃจ์ด์ง๋ค (์๋ฐ์์ ๋ฌธ์ ์๋์ง ๋จผ์ ์ฒดํฌ)
- ๋ฐ๋ณต์ ์ธ ์์ ์ ํ ๊ฒฝ์ฐ ์๋๊ฐ ๋น ๋ฆ
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
- insert, update, delete ๋ช ๋ น์ ์คํํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ commit ๋๋ค.
- ํ์ ์, ์๋ฐ์์ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋ค.
PreparedStatement ์ฃผ์ ๋ฉ์๋
- executeUpdate()
insert, update, delete, create, alter, drop ๋ฑ์ผ๋ก ์ฟผ๋ฆฌ ์คํ, DML ์ ์คํ ํ์๋ฅผ ๋ฐํํ๊ณ , DDL ์ 0์ ๋ฐํํ๋ค - executeQuery()
select ๋ฌธ ์คํ, select ์คํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์๋ ResultSet ๊ฐ์ฒด๋ฅผ ๋ฐํ
package db.item3;
import java.sql.Connection;
import java.sql.PreparedStatement;
import com.util.DBConn;
public class Ex01_PreparedStatement {
/*
* PreparedStatement :Statement ํ์ ์ธํฐํ์ด์ค :ํ๋ฆฌ ์ปดํ์ผ(์ ์ฒ๋ฆฌ)๋
* SQL๋ฌธ์ ๋ํ๋ด๋ ๊ฐ์ฒด :์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋๋
* Statement๋ฅผ ์ฌ์ฉํ์ง ์๊ณ :PreparedStatement๋ฅผ ์ฌ์ฉํ๋ค
*/
public static void main(String[] args) {
Connection conn = DBConn.getConnection();
PreparedStatement pstmt = null;
String sql;
try {
sql = "INSERT INTO score(hak,name,birth,kor,eng,mat)Values(?,?,TO_DATE(?,'YYYY-MM-DD'),?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "7788");
pstmt.setString(2, "ํ๊ธธ๋");
pstmt.setString(3, "2000-10-15");
pstmt.setString(4, "85");
pstmt.setString(5, "95");
pstmt.setString(6, "70");
pstmt.executeUpdate();
//๋๋ฒ์งธ ์ฌ๋ ๋ฑ๋ก
pstmt.setString(1, "7789");
pstmt.setString(2, "๋์๋ฐ");
pstmt.setString(3, "2000-08-10");
pstmt.setString(4, "75");
pstmt.setString(5, "80");
pstmt.setString(6, "90");
pstmt.executeUpdate();
System.out.println("๋ฑ๋ก ์๋ฃ....");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (Exception e2) {
}
}
}
}
}
JDBC ํ๋ก๊ทธ๋จ ์์ฑ ์์
- DriverManager.getConnection() ์์ Connection ๊ฐ์ฒด๋ฅผ ์ป์ด ์จ๋ค.
- ์ฟผ๋ฆฌ ์์ฑ
- SQL ๋ฅผ ์ธ์๋ก PreparedStatement ๊ฐ์ฒด๋ฅผ ์์ฑ
- ์ฟผ๋ฆฌ์ in ํ๋ผ๋ฏธํฐ๋ฅผ setter ๋ฅผ ์ด์ฉํ์ฌ ์ค์ ํ๋ค
- ์ฟผ๋ฆฌ ์คํ select : executeQuery(), ๋๋จธ์ง ์ฟผ๋ฆฌ : executeUpdate()
ScoreDAOImpl
ํ๋ฒ ๊ฒ์ SELECT ๋ฉ์๋
//ํ๋ฒ๊ฒ์
@Override
public ScoreDTO findById(String hak) {
ScoreDTO dto=null;
PreparedStatement pstmt = null;
ResultSet rs= null;
String sql;
try {
sql="SELECT hak,name,TO_CHAR(birth,'YYYY-MM-DD')birth,kor,eng,mat,(kor+eng+mat)tot,(kor+eng+mat)/3 ave FROM score WHERE hak=?";
pstmt =conn.prepareStatement(sql);
pstmt.setString(1, hak);
rs=pstmt.executeQuery();
if(rs.next()) {
dto=new ScoreDTO();
dto.setHak(rs.getString("hak"));
dto.setName(rs.getString("name"));
dto.setBirth(rs.getString("birth"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setTot(rs.getInt("tot"));
dto.setAve(rs.getInt("ave"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs);
DBUtil.close(pstmt);
}
return dto;
}
ScoreUI
ํ๋ฒ ๊ฒ์ UI
protected void findByHak() {
System.out.println("\nํ๋ฒ๊ฒ์...");
String hak;
try {
System.out.println("๊ฒ์ํ ํ๋ฒ?");
hak=br.readLine();
ScoreDTO dto = dao.findById(hak);
if(dto==null) {
System.out.println("๋ฑ๋ก๋ ์๋ฃ๊ฐ ์๋๋๋ค.\n");
return;
}
printScore(dto);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println();
}
ScoreDAOImpl
๋ฐ์ดํฐ ์ ๋ ฅ ๋ฉ์๋
@Override
public int insertScore(ScoreDTO dto) throws SQLException {
int result = 0;
PreparedStatement pstmt = null;
String sql;
// insert into ํ
์ด๋ธ๋ช
(์ปฌ๋ผ, ์ปฌ๋ผ) values(๊ฐ, ๊ฐ)
try {
// 1) ์ฟผ๋ฆฌ(sql) ์์ฑ
sql = "insert into score(hak, name, birth, kor, eng, mat) values(?,?,?,?,?,?)";
// 2) ์ฟผ๋ฆฌ๋ฅผ ์ธ์๋ก PreparedStatement ๊ฐ์ฒด๋ฅผ ์์ฑ
pstmt = conn.prepareStatement(sql);
// 3) setter ๋ฅผ ์ด์ฉํ์ฌ ? ์ ๊ฐ ํ ๋น (์์ ์ง์ผ์ ๋ฃ์ด์ผ ํจ)
pstmt.setString(1,dto.getHak());
pstmt.setString(2,dto.getName());
pstmt.setString(3,dto.getBirth());
pstmt.setInt(4,dto.getKor());
pstmt.setInt(5,dto.getEng());
pstmt.setInt(6,dto.getMat());
// 4) ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค
result = pstmt.executeUpdate();
} catch (SQLException e) {
throw e; // ์์ธ ๋์ง๊ธฐ
} finally {
// 5) ๊ฐ์ฒด close
DBUtil.close(pstmt);
}
return result;
}
ScoreUI
๋ฐ์ดํฐ ๋ฑ๋ก UI๊ตฌํ๊ณผ ์์ธ์ฒ๋ฆฌ
protected void insert() {
System.out.println("\n์๋ฃ ๋ฑ๋ก...");
ScoreDTO dto = new ScoreDTO();
try {
System.out.print("ํ๋ฒ?");
dto.setHak(br.readLine());
System.out.print("์ด๋ฆ?");
dto.setName(br.readLine());
System.out.print("์๋
์์ผ?");
dto.setBirth(br.readLine());
System.out.print("๊ตญ์ด?");
dto.setKor(Integer.parseInt(br.readLine()));
System.out.print("์์ด?");
dto.setEng(Integer.parseInt(br.readLine()));
System.out.print("์ํ?");
dto.setMat(Integer.parseInt(br.readLine()));
dao.insertScore(dto);
System.out.println("๋ฑ๋ก์๋ฃ");
} catch (NumberFormatException e) {
System.out.println("์๋ฌ= ์ ์๋ ์ซ์๋ง ๊ฐ๋ฅํฉ๋๋ค.");
} catch (SQLIntegrityConstraintViolationException e) {
//NOT null ๋ฑ์ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐํ ๋ ๋ฐ์ํ๋ ์์ธ
//๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด
if(e.getErrorCode()==1) {
System.out.println("์๋ฌ-๋ฑ๋ก๋ ํ๋ฒ์
๋๋ค.");
}else if(e.getErrorCode()==1400) { // INSERT NOT NULL ์ ์ฝ ์๋ฐ
System.out.println("์๋ฌ - ํ์ ์
๋ ฅ ์ฌํญ์ ์
๋ ฅํ์ง ์์์ต๋๋ค.");
}else {
System.out.println(e.toString());
}
} catch (SQLDataException e) {
if(e.getErrorCode()==1840 || e.getErrorCode()==1861) {
System.out.println("์๋ฌ-๋ ์ง ํ์์ด ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.");
}else{
System.out.println(e.toString());
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}