성장 일기/쌍용교육센터 / / 2023. 2. 8. 22:27

0206/ResultSetMetaData, CLOB

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유