쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/sangyoungjdbc에 올려두었습니다.
like 사용( 문자열의 일부분을 알고 검색 할 때 )
- 바인드 변수와 %를 함께 사용.
- %를 일반문자로 변환 후 바인드 변수와 붙여서 사용한다.( ?||’%’ )
- like 컬럼명 ?%은 바인드 변수를 인식하지 못하니 주의
ResultSetMetaData
- 조회 쿼리를 사용하여 DD 없이 컬럼의 정보를 얻을 때 사용하는 객체
- 모든 DBMS에 사용할 수 있다.
- 컬럼명, 데이터형, 크기, Null허용 여부, “desc 테이블명” 의 정보가 나온다.
// 쿼리문 실행
String select="select 문";
PreparedStatement pstmt=con.prepareStatement( select );
ResultSet rs=pstmt.executeQuery();
//ResultSet에서 ResultSetMetaData얻기
ResultSetMetaData rsmd=rs.getMetaData();
// "desc 테이블명" ( SQLPlus 문 )정도의 정보를 얻을 수 있다.
// 컬럼의 개수 얻기
int cnt = rsmd.getColumnCount();
// 컬럼 명 얻기
String columnName = rsmd.getColumnName( 인덱스 );
//컬럼 데이터형 명
String dataType = rsmd.getColumnTypeName( 인덱스 );
// 컬럼의 크기
int size = rsmd.getPrecision( 인덱스 );
// 컬럼에서 Null 허용
int num = rsmd.isNullable( 인덱스 );
CLOB(Character Large Object)
- 데이터 형의 사용
- 문자열로 최대4Gbyte까지 저장가능
(데이터 형의 크기를 설정하지 않고, 입력되는 데이터의 크기까지 컬럼의 크기로 설정)
- rs에 별도의 Stream을 사용하여 연결하고 값을 얻는다.
- local에서는 rs.getString() 으로 값을 가져올 수 있으나, Linux 서버에 올라가면
rs.getClob() method를 사용하고 Stream을 연결하여 값을 얻는다.
//DBMS에서 테이블을 만든다. create table test( 컬럼명 clob );
String query="select문";
PreparedStatement pstmt=con.prepareStatement( query );
ResultSet rs=pstmt.executeQuery();
if( rs.next() ){ // 레코드가 존재하는 지 물어본 후
// Clob를 받고
Clob clob = rs.getClob("컬럼명");
// Clob은 데이터의 양이 많기 때문에
// ResultSet에서 별도의 Stream을
// 연결하여 데이터를 읽어 들여야 한다.
// 스트림을 얻는다.
Reader reader = clob.getCharacterStream();
// 컬럼 값을 줄 단위로 읽어들이기 위해서 스트림을 연결( 기능 확장 )
BufferedReader br=new BufferedReader( reader );
String data="";
while( (data=br.readLine()) != null ){//EOF
data // \n까지 읽어들인 내용을 사용
}
Transaction 처리( DB 업무 처리의 단위 – insert, update, delete로 구성 )
- java.sql.Connection은 auto commit이 기본 설정
Connection.setAutoCommit( true );// 쿼리문 하나로 Transaction이 완료된다.
- 여러 개의 쿼리문이 ( insert, update, delete ) 하나의 Transaction을 구성해야 하는 경우
setAutoCommit( false )로 설정하고, 쿼리 수행한 행수를 가지고
조건문을 부여해 commit() 또는 rollback()을 수행한다.
- Connection이 close가 된다면 commit을 수행 한 후 연결이 끊어진다.
- 여러 개의 insert가 하나의 Transaction으로 구성될 때에는 commit또는 예외로
처리한다.
- 여러 개의 update나 delete가 하나의 Transaction으로 구성 될 때에는
commit과 rollback을 처리한다.
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
0209/SQLInjection, web (0) | 2023.02.12 |
---|---|
0207/Procedure (0) | 2023.02.12 |
0203/PreparedStatement (0) | 2023.02.08 |
0202/Statement (0) | 2023.02.02 |
0201/인덱스, JDBC (0) | 2023.02.01 |