ON/JDBC

[JDBC] Statement | PreparedStatement 차이

박도비 2023. 5. 29. 23:35
728x90

Statement

: Connection 클래스의 createStatement() 메소드를 호출하여 얻어지며,

  SQL 질의문을 String에 담아 excuteQuery() 메소드를 호출하여 SQL 질의 수행

 

📌 Statement 작성 순서:  커넥션 생성 - SQL 작성 - Statement 객체 생성 - 수행 후 결과 반환

// 커넥션 생성
conn = DriverManager.getConnection(type + ip + port + sid, user, pw);

// SQL 준비
String sql = "SELECT * FROM EMPLOYEE WHERE EMP_ID =" + input;

// Statement 생성
stmt = conn.createStatement();

📌  수행 후 결과 반환 

SQL 수행 후 결과 반환 받기
Statement - SELECT : stmt.excuteQuery(sql);

DML 수행 후 결과 반환 받기
Statement - DML : stmt.executeUpdate(sql);

PreparedStatement

: Connection 클래스의 preparedstatement() 메소드를 사용하여 인스턴스 생성 

  SQL 질의문을 위치홀더 인 ? 로 표현되는 String으로 정의한다. 

 

📌  preparedStatement 작성 순서 : 커넥션 생성 - SQL 작성(? 사용) - PreparedStatement 객체 생성 (SQL 적재)

// 커넥션 생성
conn = DriverManager.getConnection(type + ip + port + sid, user, pw);

// SQL 작성
String sql = "INSERT INTO EMPLOYEE2 VALUES (?, ?, ?, ?, ?, ?, ?, 'S5', ?, ?
					,200,SYSDATE, NULL, 'N')";
                                            
// preparedStatment 객체 생성(SQL 적재)
pstmt = conn.prepareStatement(sql);

💡 SQL 작성 시, " " / ' ' 홑따옴표 작성방법 

" " : 칼럼명 

'  ' :  문자열

만약, sql developer 작성하게 된다면, 아래와 같이 작성을 한다. 
String _sql = "UPDATE EMPLOYEE2 SET BONUS = 350 WHERE DEPT_CODE = '50'";

java에서 sql 작성하게 된다면 !! !! 부분에 새로운 값을 가져와야한다. 
String _sql = "UPDATE EMPLOYEE2 SET BONUS = !!350!! WHERE DEPT_CODE = !!'50'!!";
String _sql = "UPDATE EMPLOYEE2 SET BONUS 
			= " + emp.getBonus() + " WHERE DEPT_CODE  = '"+ emp.getDeptCode() +"'";

 

📌 ? 위치 홀더 값 대입 

String sql = "INSERT INTO EMPLOYEE2 VALUES (?, ?, ?, ?, ?, ?, ?, 'S5', ?, ?
                                     ,200,SYSDATE, NULL, 'N')";

pstmt = setINT(1,emp.getId()); // 입력 받은 사번을 1번에 세팅한다. 
pstmt.setString(2, emp.getEmpName());
pstmt.setString(3, emp.getEmpNo());
pstmt.setString(4, emp.getEmail());
pstmt.setString(5, emp.getPhone());
pstmt.setString(6, emp.getDeptCode());
pstmt.setString(7, emp.getJobCode());
pstmt.setInt(8, emp.getSelary());
pstmt.setDouble(9, emp.getBonus());

📌  수행 후 결과 반환 

SQL 수행 후 결과 반환 
PreparedStatment - SELECT : pstmt.excuteQuery();

DML 수행 후 결과 반환 
PreparedStatment - DML : pstmt.executeUpdate();

 


✅ 커넥션 생성 후 자동 커밋 비활성화 

conn = DriverManager.getConnection(type+ip+port+sid,user,pw);

 - 생성된 커넥션을 이용해 SQL을 수행하게 되면 자동 커밋이 된다.

   만일 개발자가 잘못 된 정보를 넣었을때도 잘동 커밋이 되는 경우가 있어 자동 커밋 비활성화를 해준다. 

 

커넥션 생성 
conn = DriverManager.getConnection(type+ip+port+sid,user,pw);

자동 커밋 비활성화 
conn.setAutoCommit(false);

자동 커밋 후 result 결과값 반환 후 트렌젝션 제어 다시 작성하기 
-- 작성하지 않는다면, close()가 실행되면 남은 트랜젝션 내용이 모두 commit 된다. 
if (result > 0) conn.commit();// DML 성공시 commit 수행
else            conn.rollback();// DML 실패시 rollback 수행
728x90