new Driver() 없이도 DriverManager가 드라이버를 구동할 수 있는 이유는 Class.forName으로 드라이버를 로드할 때, 이미 DriverManager에 등록되기 때문이다.
Drive 클래스 내부 코드
SQL을 위한 Statement 객체 생성
Statement
쿼리를 담아 전달한 그릇
종류
Statement
단일로 사용할 때 빠른 속도를 지님
매번 컴파일을 수행해야 함
쿼리에 인자를 부여할 수 없음
취약점이 있어서 사용하지 않는 것이 권고되어짐
String sql = "SELECT name, class FROM player"; Statement stmt = conn.createStatement(); ResultSet rs = s.executeQuery(sql);
PreparedStatement
주로 사용하는 statement
여러번 수행될 때 빠른 속도를 지님
처음 프리 컴파일 된 후, 컴파일을 수행하지 않음
쿼리에 인자 부여 가능 ( = 동적 쿼리 가능)
sql문에 ?를 이용해서 setXXX()를 통해 원하는 값을 넣을 수 있음
?는 앞에서부터 1,2,3~ 으로 인덱스를 가짐
String sql = "UPDATE player SET name = ?, position = ? where name = ?; ";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "토리");
pstmt.setString(2, "공격수");
pstmt.setString(3, "초코");
ps.executeQuery();
CallableStatement
PreparedStatement + 프로시저 호출 가능
SQL 문장 실행
Execute
execute()
모든 구문 수행 가능
Boolean 값 반환
쿼리 수행 결과가 ResultSet 일 경우 true, 아닐 경우 false
executerQuery()
쿼리 수행 결과를 ResultSet에 담아서 반환
주로 Select 문에 사용
executeUpdate()
INSERT, UPDATE, DELETE 나 CREATE, DROP 등을 실행하는데 사용
영향을 받은 행 수를 반환
SQL 실행 결과 처리
ResultSet
검색 결과를 테이블 형식으로 저장한 인스턴스
데이터가 여러행일 경우 한번에 가져올 수 없기 때문에, 내부적으로 커서를 이용해서 가져온다.
댓글