개발 일기
Statement 말고 PreparedStatement란??? (feat. 활용해보기) 본문
안녕하세요.
오늘은 JDBC Flow의 단계 중 SQL 전송 객체인 Statement 객체를 생성할 때
Statement가 아닌 PreparedStatement를 활용하여 보다 간편하게 SQL문을 전송해보도록 하겠습니다.
PreparedStatement 활용 방법
1. sql문작성
- ?(파라메타) 를 사용해서 나중에 외부에서 데이타(리터럴)를 받을수있게한다.
ex> insert into emp(empno,ename,job,manager,hiredate,sal,comm,deptno) values(?,?,?,?,?,?,?,?)
- 테이블이름,컬럼이름등은 ? 를 사용해서 외부에서 입력받을수없다.
ex> select * from ?
2. PreparedStatement 객체생성 후 인자로 sql문을 넣어서 생성한다
ex> PreparedStatement pstmt = con.prepareStatement(sql);
3. 생성된 PreparedStatement 객체에 파라메타를 setting 한다.
- sql 좌측 ? 부터 1,2,3...
ex> pstmt.setInt(1,1234);
pstmt.setString(2,"KIM");
pstmt.setString(3,"MANAGER");
pstmt.setInt(4,7839);
pstmt.setDate(5,new Date());
pstmt.setDouble(6,1000.12);
pstmt.setInt(7,0);
pstmt.setInt(8,10);
4. 실행
- 실행시 sql문을 인자로 넣지안는다.
ex> pstmt.executeUpdate();
pstmt.executeQuery();
PreparedStatement 코딩 연습
public class PreparedStatementMain {
public static void main(String[] args) throws Exception {
String driverClass = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@182.237.126.19:1521:xe";
String user = "DB접속정보";
String password = "DB접속정보";
Class.forName(driverClass);
Connection con = DriverManager.getConnection(url, user, password);
String insertSql = "insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(?,?,?,?,sysdate,?,?,?)";
PreparedStatement pstmt = con.prepareStatement(insertSql);
pstmt.setInt(1, 7001);
pstmt.setString(2, "ALICE");
pstmt.setString(3, "CLERK");
pstmt.setInt(4, 7369);
pstmt.setDouble(5, 5000.34);
pstmt.setInt(6, 400);
pstmt.setInt(7, 30);
pstmt.executeUpdate();
String selectSql = "select * from emp where sal >= ? and sal<= ? and job = ?";
PreparedStatement pstmt1 = con.prepareStatement(selectSql);
pstmt.setInt(1, starSal);
pstmt.setInt(2, endSal);
pstmt.setString(3, job);
ResultSet rs = pstmt1.executeQuery();
while (rs.next()) {
int empno = rs.getInt("empno");
String ename = rs.getString("ename");
String jobStr = rs.getString("job");
double sal = rs.getDouble("sal");
Date hireDate = rs.getDate("hiredate");
String hireDateStr = new SimpleDateFormat("yyyy/MM/dd").format(hireDate);
}
}
}
ex)
Statement 객체 활용 시 SQL문에 파라메타(인자)를 포함 시
insertSql = "insert into address values(address_no_seq.nextval,'"+ id+"','"+ name +"','"+phone+"','"+address+"')";
PreparedStatement 활용 시
insertSql = "insert into address values(?,?,?,?,?)";
PreparedStatement 객체 사용 시 기존 Statement를 사용 할 때 SQL문을 인자로 받기 위해서는 번거로웠는데
?(파라메타)를 통해 SQL문 작성이 훨씬 활용이 쉬워졌습니다.
감사합니다.
'JAVA 공부' 카테고리의 다른 글
JDBC(Java Database Connectivity)를 알아보기! (0) | 2021.07.22 |
---|---|
JAVA 예외 내용 정리 해보기 (0) | 2021.06.29 |
JAVA Collection 클래스 Map 인터페이스 3 (feat. HashMap 활용해보기) (0) | 2021.06.27 |
JAVA Collection 클래스 Set 인터페이스 2 (feat. HashSet 활용해보기) (0) | 2021.06.25 |
JAVA Collection 클래스 List 인터페이스 1 (feat. ArrayList 활용해보기) (0) | 2021.06.24 |