10/24 27-6 (inserSQL.prepared)
이제 preparedStatement 계열을 정리할 거
근데 왜 이걸 쓰남?
쿼리문을 statement객체 생성 할 때 미리 넣어줘서 더 빠름!!!
그리고 변수 넣을 때 '' 신경 쓸 필요가 없고, 에러 발생이 적어 좋다 !
[객체 생성 시]
PreparedStatement객체는 객체 생성 시 미리 쿼리문을 준비해서 Connection객체의 prepareStatement(쿼리문)메소드의 인자로 전달해야 한다.
PreparedStatement객체 생성 시 전달된 쿼리문을 먼저 parsing하기 때문에 실행 시에는 바로 실행한다. 따라서 실행 시에는 쿼리문을 전달할 필요가 없다보니 속도가 빠르다는 장점 !!!
[쿼리 실행 시 쿼리문 전달 불필요]
1. 인파라미터가 없는 쿼리문
-인파라미터 설정 불필요.바로 실행하면 됨.
2.인파라미터가 있는 쿼리문 (인파라미터는 ? 요걸로 쓴다!)
-실행전 반드시 값을 설정
***쿼리 실행 전에 값에 해당하는 부분을 ? 처리한 경우 값을 설정해줘야 함.
***?(인파라미터)는 쿼리문의 값에 해당하는 부분에만 넣어줘야 한다.
***인파라미터를 설정 할 때는 PreparedStatement객체의 setXXXX(파라미터인덱스,설정할 값)메소드로 설정한다
ex)
Oracle의 자료형이 NUMBER 면 setInt(),
char/varchar2 면 setString()
자료형에 상관없이 setString( )설정가능
즉, ResultSet객체로 값을 읽어오는 getXXXX()메소드와 사용법이 동일하다.
public class InsertSQL extends IConnectImpl{
public InsertSQL(String url, String user, String password){
connect(url, user, password);
}/////////////인자생성자
public void execute() throws Exception {
String sql ="INSERT INTO member VALUES(?,?,?,?)";
try{
psmt = conn.prepareStatement(sql) // 여기서 미리 인자를 넣어 줌
while(true){
try{
psmt.setString(1,getValue("아이디"));
psmt.setString(2,getValue("비밀번호"));
psmt.setString(3,getValue("이름"));
//날짜 설정 날짜를 java.sql.Date타입으로 설정시]
//Date regidate = new Date(new java.util.Date().getTime());
//psmt.setDate(4,regidate);
//날짜를 문자열로 설정
Pattern pattern = Pattern.compile("[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}");
String regidate = null;
while(true) {/// 날짜만 반복하네
regidate = getValue("가입일");
Matcher matcher = pattern.matcher(regidate);
if(!matcher.matches()) {
System.out.println("날짜 형식의 문자열이 아닙니다.");
continue;
}
break;
}
psmt.setString(4,regidate);
System.out.println(psmt.executeUpdate()+"행이 입력 되었습니다."); // 요기서 인자 안 넣어 줌 신기!
}
catch(SQLException e) {
System.out.println("입력시 오류:"+e.getMessage());
}
} //////while
}
chtch(SQLException e){
System.out.println("preeparedStatement 객체 생성 실패:"+e.getMessage());
}
finally{
close();
}
}
public static void main(String[] args) {
try {
new InsertSQLMore(ORACLE_URL,"KOSMO","KOSMO").execute(); //로그인정보 생성자에 않넣고 여기다 넣어도 가능
}
catch (Exception e) {
System.out.println("오류발생:"+e.getMessage());
}
}////main
}