레이블이 jdbc인 게시물을 표시합니다. 모든 게시물 표시
레이블이 jdbc인 게시물을 표시합니다. 모든 게시물 표시

2011년 9월 5일 월요일

JDBC 4.0 Driver 자동 로딩 사용하기


META-INF/services/java.sql.Driver 파일을 만든다. 

파일의 내용에 driver 클래스 이름을 적어 준다. 

ex) com.ibm.db2.jcc.DB2Driver

 

java.sql and javax.sql Features Introduced in the JDBC 4.0 API

  • auto java.sql.Driver discovery -- no longer need to load a java.sql.Driver class via Class.forName
  • National Character Set support added
  • Support added for the SQL:2003 XML data type
  • SQLException enhancements -- Added support for cause chaining; New SQLExceptions added for common SQLState class value codes
  • Enhanced Blob/Clob functionality -- Support provided to create and free a Blob/Clob instance as well as additional methods added to improve accessiblity
  • Support added for accessing a SQL ROWID
  • Support added to allow a JDBC application to access an instance of a JDBC resource that has been wrapped by a vendor, usually in an application server or connection pooling environment.
  • Availability to be notfied when a PreparedStatement that is associated with a PooledConnection has been closed or the driver determines is invalid

2009년 8월 28일 금요일

DB2에서 CODESET을 지정하여 새로운 DB만들기

db2 create db mywiki  USING CODESET UTF-8 TERRITORY KR

Windows에서 기본 설정으로 만들면 CODEPAGE와 CODESET이 1363으로 지정되어 JDBC 연결 사용시 UnsupportedEncodingException : Cp1363C 에러가 발생함.

DB2 BLOB 처리방법

저장 방법
ByteArrayOutputStream과 OjbectInputStream을 이용하여
저장하고자 하는 내용( 자바 객체 )를 byte array로 serialize한다. ( writeObject )사용
변환된 byte array를 DB2LobFactory를 이용하여 create 한다.

ByteArrayOutputStream bo = new ByteArrayOutputStream(2048);
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(msg.getArgs());
stmt.setBlob(++index, DB2LobFactory.createBlob( bo.toByteArray() ));
oo.close();
bo.close();


조회 방법

동일한 sql문을 사용하여 조회 후 ResultSet의 getBlob을 이용하여 꺼낸다음.
ByteArrayInputStream과 ObjectInputStream을 이용하여 Object로 변환 후 원하는 객체로 캐스팅 한다.

Blob blob =  rset.getBlob(++index);
//System.out.println(rset.getInt(1)+"blob : "+blob );
if( blob != null ){
// System.out.println(blob.getBytes(1L,(int)blob.length()));
ByteArrayInputStream bin = new ByteArrayInputStream( blob.getBytes(1L,(int)blob.length()) );
ObjectInputStream oin = new ObjectInputStream( bin );
Object[] args = (Object[])oin.readObject();
for( int i=0; args!=null &&  i < args.length; i++ ){
if( args[i] == null ) continue;
out.println(args[i].getClass().getName()+":");out.println( args[i] ); out.println("<br>");
}
oin.close();
bin.close();
}