Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[JDBC] JDBC 로드, 연결, 실행, 닫기 본문
JDBC(Java DataBase Connectivity)
🚀 단계
1) 로드: 연동하려는 DB제품(벤더)를 선택하는 것, Driver가 필요하다(~.jar)
(만약 Driver를 못찾으면 ClassNotFoundException 발생)
2) 연결: 로드된 DB에 접속, URL(host name, port, SID), ID, Password를 이용해서 연결객체를 얻어오는 과정
3) 실행: CRUD 작업
4) 닫기: 사용된 객체를 반납
⚠️ 커넥션(Connection)은 절대로 공유하면 안된다.(1커넥션 == 1트랜잭션)
⚠️ 1)은 변하지 않으니, 딱 한 번만❗
1) 로드 - ~.jar 필요하다
2) 연결 - URL, ID, Password 필요
(⚠️ ConnectionException 발생)
3) 실행 - CRUD작업을 위한 2가지 방법
1. Statement방식 (SQL INJECTION 공격대상)
2. 'PreparedStatement 방식' (SQL INJECTION 방어)
📌. PreparedStatement방식이 SQL INJECTION을 방어할 수 있는 이유?
Statement방식은 ?바인딩을 해서 ?에 다른 연산자가 들어올 수 있지만,
ex. String sql = "insert into emp(empNo, eName, job, hiredate) values(?, ?, ?, sysdate)";
PreparedStatement방식은 ps.set(1, empNo);과 같이 메서드를 이용하므로,
다른 연산자가 들어올 수 없다.
Statement방식은 ?바인딩을 해서 ?에 다른 연산자가 들어올 수 있지만,
ex. String sql = "insert into emp(empNo, eName, job, hiredate) values(?, ?, ?, sysdate)";
PreparedStatement방식은 ps.set(1, empNo);과 같이 메서드를 이용하므로,
다른 연산자가 들어올 수 없다.
[DDL or DML.java]
String sql = "<CIUD문>";
PreparedStatement ps = con.prepareStatement(sql); // 2.방식
// Statement st = con.createStatement(); // 1.방식
ps.setInt(1, empNo);
ps.setString(2, eName);
ps.setString(3, job);
int result = st.executeUpdate(); // create, insert, update, delete (DML), (0: 실패, 1: 성공)
// int result = st.executeUpdate(sql); // 1.방식
[DQL.java]
String sql = "<Select문>";
PreparedStatement ps = con.prepareStatement(sql); // 2.방식
// Statement st = con.createStatement(); // 1.방식
ResultSet rs = st.executeQuery(); // select (DQL)
// ResultSet rs = st.executeQuery(sql); // 1.방식
List<EmpDTO> list = new ArrayList<>();
// 가져올 레코드가 여러개일 때
while(rs.next()) { // 가져올 레코드가 하나일 땐, if(rs.next())
//ex
int empNo = rs.getInt("empno"); // rs.get타입("컬럼명");
String eName = rs.getString(2); // rs.get타입(인자 순서);
String job = rs.getString(3);
EmpDTO emp = new EmpDTO(empNo, eName, job);
list.add(emp);
}
📌. rs.next();
: cursor를 밑으로 내리는 method (cursor가 처음에는 column명에 있다)
(있으면 true, 없으면 false)
: cursor를 밑으로 내리는 method (cursor가 처음에는 column명에 있다)
(있으면 true, 없으면 false)
4) 닫기 - 사용된 객체를 반납
'Backend > JDBC' 카테고리의 다른 글
[JDBC] Mapper문서와 SqlSessionFactory 빌드 및 SqlSession의 내장 메서드 (0) | 2023.05.07 |
---|---|
[JDBC] MyBatis 환경설정 및 주요 컴포넌트(Component) (0) | 2023.05.06 |
[JDBC] DBCP(DataBase Connection Pool)과 WAS (0) | 2023.04.23 |
[JDBC] DBManager, DBProperties (0) | 2023.04.19 |
Comments