PreparedStatement
- 쉽게 stmt 상위호환이다.
- ?에 값을 넣을 수 있도록 함(매핑 느낌)
기본 사용 방법
Connection conn; // 커넥션 객체 생성
PreparedStatement pstmt; // pstmt 객체 생성
pstmt=conn.prepareStatement(sql) // 만들 적에 sql문이 들어간다!
그렇다면 stmt와의 차이점은 무엇인가?
stmt -> 일단 만들고, 직접 쿼리문(SQL문)을 메서드의 인자로 전달
pstmt -> 만들당시에 쿼리문(SQL문)을 전달하고, 이후에 값을 메서드의 인자로 전달
CRUD 중 C에 해당되는 Insert에 적용해보기.
내가 가지고 있는 테이블은 atrribute로
SID INT PRIMARY KEY, -- PK
NAME VARCHAR(20) NOT NULL, -- 이름은 NULL이 될 수 없음
SCORE INT DEFAULT 0 -- 입력값이 없으면 0점으로
를 가지고 있다.
Connection conn; // 먼저 conn 객체 생성
PreparedStatement pstmt; // pstmt 객체 생성
final String sql_insert="INSERT INTO STUDENT VALUES((SELECT NVL(MAX(SID),0)+1 FROM STUDENT),?,?)";
// insert는 수정 할 일이 없으니 final을 사용해주고, SID값은 중복이 없게끔 MAX+1 만약 MAX가 없다면 0으로 취급하는
// 이중쿼리로 설정해줌,
// 이제 ?, ? 에 입력값을 넣어주면 된다.
try {
pstmt=conn.prepareStatement(sql_insert);
pstmt.setString(1, vo.getName()); // 인자의 1번 자리에 객체의 이름
pstmt.setInt(2, vo.getScore()); // 인자의 2번자리에 객체의 점수
int res=pstmt.executeUpdate();
System.out.println(" 로그: insertStudent() 완료"); // 학생추가가 성공했을 때 로그
if(res==0) { // 학생에 올바른 정보가 들어오지 않으면
return false; // false
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} finally {
JDBCUtil.disconnect(pstmt, conn); // 사용을 했으니 닫아준다.
}
return true;
}
이렇게 [PreparedStatement =pstmt] 를 사용하여
특정한 값을 데이터베이스에 추가할 때 매핑해서 저장을 할 수 있게 되었다.
'개발자노트 > DBMS' 카테고리의 다른 글
[SQL] JDBC에서 delete (0) | 2022.07.05 |
---|---|
[SQL] JDBC에서 중복코드를 최소화 해주는 [JDBCUtil] (0) | 2022.07.05 |
[SQL] 오라클의 정보를 자바에서 SellectAll/One 하기 (0) | 2022.07.04 |
[SQL] Java에 SQL(오라클) 연동하기(기본 코드) (0) | 2022.07.04 |
[SQL] Java에 SQL(오라클) 연동하기. (0) | 2022.07.04 |