타의 추종을 불허한다
|
|
다음 문장은 잘못된 SQL을 초래하며, 매개변수가 존재할 경우 SQL Injection의 대상이 된다
INSERT INTO MUSKETEERS(NAME) VALUES('John d' Artagan');
PrepareStatement는 자동적으로 필요할 때마다 스트링을 예외처리한다
Preparestatement psmt = con.prepareStatement("INSERT INTO MUSKETEERS (NAME) VALUES(?) ");
psmt.setString(1,"John d' artagan");
psmt.executeUpadate();
|
RS메타데이터를 사용하면 RESULTSET의 속성을 더 많이 얻을수 있다
테이블 스크립트 생성에 유연성을 더해줄 수 있다
ResultSetMetaData rsmd = rs.getMetaData(); int numcols = rsmd.getColumnCount(); for(int i = 1; i<= numcols;i++){ String str = rsmd.getColumnLabel(); } |
|
따라서, 만일 Statement를 닫고 다른질의어를 실행하기 위해 사용하면, 연결되었던 이전 ResultSet객체는 자동으로 닫힌다
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM CUSTOMERS");
|
첫번째 예외는 일반적으로 가장 관련있는 정보를 포함한다
추가적인 예외내용을 출력하기위해서는 .getNextException() 메서드를 활용한다
catch(SQLException e){
out.println(e.getMessage());
while((e=e.getNextException())!=null){
out.println(e.getMessage());
}
}
|