PreparedStatement
- 쿼리문을 미리 만들어두고, bind변수를 사용하여 값만 나중에 넣어서 실행하는 객체
- 사용법
- 드라이버로딩
- 커넥션얻기
- 쿼리문 생성객체(PreparedStatement) 얻기 ( 바인드변수 사용 )
String insert=“insert into dept(deptno,dname,loc) values(?, ?, ?)”;
PreparedStatement pstmt=con.prepareStatement( insert );
- 바인드변수에 값 설정
- 정수값 : pstmt.setInt( 인덱스, 정수값 );
- 실수값 : pstmt.setDouble( 인덱스, 실수값 );
- 문자열 : pstmt.setString(인덱스, 문자열값);
- 날짜 : pstmt.setDate( 인덱스. java.sql.Date)
- 쿼리문 수행 후 결과 얻기 ( 부모(Statement)의 method (executeXxx())를 사용하지 않도록 주의 )
- create, drop, alter, grant, revoke => pstmt.execute()
- insert, update, delete => pstmt.executeUpdate();
- select => pstmt.executeQuery()
- 연결끊기
PreparedStatement
PreparedStatement pstmt = con.prepareStatement(sql);
// 바인드 변수는 %와 함께 사용하면 인식을 못함.
- 바인드 변수에 값 설정
pstmt.setString(1,값)
- // 해결 : %를 Oracle 일반 문자열로 만들어 바인드변수와 붙임(||).
Singleton Pattern
-
실행중인 JVM에서 하나의 instance만 생성하고 사용하는 design pattern.
-
장점 : 속도가 빠르다, 메모리 사용량이 적다.
-
단점 : singleton pattern은 사용중에 객체가 소멸되면 다시 살아나지 못한다.
-객체가 소멸되었을 때 다시 생성하는 코드를 작성해야한다.
-
값은 저장하지 않고, 업무를 수행해야하는 상황에서 사용.
-
작성법)
- 클래스외부에서 직접 객체화 할 수 없도록 막는다.
생성자의 접근 지정자를 private으로 설정public class Test{
private static Test t;
private Test(){
}
- instance를 반환하는 method작성
public static Test getInstance(){
// 외부에서 클래스명.mehtod명으로 호출 가능.
// 사용)
// Test t=Test.getInstance();
- 객체를 하나로 유지하고, 반환하는 코드 작성
if( t == null ){
t=new Test();
}//end if
return t;
}
}
- DD를 사용하지 않고 select쿼리에서 사용하는 테이블의 스키마 정보를 얻는 객체.
- ResultSet으로 부터 얻어진다.
- 사용법)
- ResultSet에서 ResultSetMetaData를 얻는다.
ResultSetMetaData rsmd = rs.getMetaData();
- method를 사용하여 테이블 schema 정보를 얻는다. (desc 테이블명 을 했을 때의 정보가 나온다.)
- 컬럼의 개수 : int columnCnt = rsmd.getColumnCount();
- 컬럼의 이름 얻기 : String columnName = rsmd.getColumnName(인덱스);
- 컬럼의 데이터 형 명 얻기 : String columnLabel = rsmd.getColumnTypeName(인덱 스);
- 컬럼의 데이터 형 크기 : int size = rsmd.precision(인덱스);
- 널 허용 여부 : int flag = rsmd.isNullable(인덱스);
CLOB(Character Large Object)얻기
- 4000Byte이상의 문자열을 저장해야 하는 경우.
- rs.getString() 사용하여 컬럼 값을 얻을 수 있긴 하나, 별도의 Stream을 연결하여 사용하는 것을 권장한다.

- 사용법 )
- rs에서 clob를 얻는다.
Clob clob = rs.getClob();
- 스트림 얻기
Reader r = clob.getCharacterStream();
- 줄단위로 읽을 수 있는 Stream과 연결
BufferedReader br = new BufferedReader(r);
- Stream을 사용해서 DBMS Table 컬럼의 문자열 읽기
STring str="";
while((str = br.readLine)!=null){
str
}

- insert => pstmt.executeUpdate() 실행 1 또는 예외가 발생
- update, delete => pstmt.executeUpdate() 실행 0~n 또는 예외가 발생