Background Image
Java
2009.08.15 03:42

CUBRID GLO 사용하기 - JDBC

조회 수 23493 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

GLO 사용하기 - JDBC

소개: CUBRID의 멀티미디어 데이터 및 대용량 텍스트 문서를 저장, 검색, 갱신 할 수 있는 클래스인 GLO(Generalized Large Object)의 사용 방법을 JDBC 인터페이스 예제를 통해 설명한다.

적용 대상: CUBRID2008, JDK 1.5.0_19

 

GLO 사용하기

GLO에는 LO, FBO 2가지 타입이 존재한다. 이 중 LO는 데이터 파일이 데이터베이스에 존재하며, FBO는 파일시스템에 존재한다.

본 문서에서는 GLO LO타입으로 데이터를 저장하는 방법 및 저장 데이터를 가져오는 방법을 알아본다.

테스트 환경 준비

예제를 수행하기 위해서는 먼저 각 인터페이스 별 실행 환경이 준비되어 있어야 하고 접속하고자 하는 DBBROKER가 구동 되어 있어야 한다. 여기서는 설치 시에 자동 생성되는 “demodb” DB를 사용한다.

테스트를 위해 다음과 같은 테이블을 먼저 생성한다.

Create table person(

name string,

photo glo

)

CUBRID GLO는 시스템의 특정 경로에 있는 파일을 GLO 테이블에 저장하고 반환되는 OID GLO Data Type으로 사용한 컬럼에 저장하는 방식으로 사용된다.

위의 예제 테이블 person의 한 row를 삭제하더라도 해당되는 GLO데이터는 GLO 테이블에 그대로 존재하게 된다. 따라서 후속 작업으로 GLO 테이블에 존재하는 데이터도 삭제해줘야 한다.

다음은 person 테이블 데이터 삭제시 해당되는 GLO 데이터도 함께 삭제하는 Trigger로 이것도 함께 생성한다.

 create trigger person_delete_glo

    before delete on person

    if obj.photo is not null   

execute delete  from glo where glo = obj.photo;

데이터 입력

본 절에서는 파일을 데이터베이스에 입력하는 방법을 설명한다.

아래의 예제는 시스템의 특정 경로에 있는 파일을 GLO 테이블에 저장하고 해당 OID person 테이블의 photo 컬럼에 저장한다.

insertGLO.java

import java.sql.*;

import java.io.*;

import cubrid.sql.*;

import cubrid.jdbc.driver.*;     //1

 

public class insertGLO {

   public static void main(String[] args) throws Exception {

 

      CUBRIDConnection conn = null;

      FileInputStream inputfile = null;

      CUBRIDPreparedStatement stmt = null;

      try {

 

         // CUBRID DB Connect

         Class.forName("cubrid.jdbc.driver.CUBRIDDriver");

         conn = (CUBRIDConnection)DriverManager.getConnection("jdbc:cubrid:localhost:33000:demodb:::","","");// 2

         // file InputStream으로 만든다.

         inputfile = new FileInputStream("input.gif");                       //3

 

         conn.setAutoCommit(false);

         // GLO에 데이터를 입력한다.

         CUBRIDOID glo_oid = conn.getNewGLO("glo", inputfile);                 //4

         inputfile.close();

 

         //GLO OID person테이블의 photo컬럼에 저장

         String sql = "insert into person(name,photo) values(?,?)";

        stmt = (CUBRIDPreparedStatement)conn.prepareStatement(sql);           //5

        stmt.setString(1, "input.gif");

        stmt.setOID(2, glo_oid);                //6

        stmt.executeUpdate();

        System.out.println("데이터가 입력되었습니다.");

        stmt.close();

         conn.commit();

         conn.close();

 

      } catch ( SQLException e ) {

         conn.rollback();

         System.err.println(e.getMessage());

      } catch ( Exception e ) {

         conn.rollback();

         System.err.println(e.getMessage());

      } finally {

         try {

           if ( conn != null ) conn.close();

         } catch ( SQLException e ) {

           System.err.println(e.getMessage());

         }

      }

   }

}

·      2 GLO를 사용할 때에는 반드시 CUBRIDConnection을 사용한다.

·      3 시스템 상의 파일을 데이터베이스에 GLO로 입력하기 위해 InputStream으로 만든다.

·      4getNewGLO(class_name, InputStream_name) API를 이용해 파일을 class_name(GLO)에 저장하고 OID를 리턴한다.

·      5 반환된 OID person테이블의 photo 컬럼에 입력하려면 CUBRIDPreparedStatement를 사용해야 한다. setOID를 사용하여 값을 입력한다.(6) 저장된 OID를 이용하여 GLO 데이터에 접근, 조작할 수 있다. CUBRIDPreparedStatement를 사용하려면 cubrid.jdbc.driver.* import해야 한다.(1)

데이터 수정

본 절에서는 이미 저장된 데이터를 새로운 파일데이터로 수정하는 방법을 설명한다.

updateGLO.java

import java.sql.*;

import java.io.*;

import cubrid.sql.*;

 

public class updateGLO {

   public static void main(String[] args) throws Exception {

 

Connection conn = null;

      FileInputStream inputfile = null;

      try {

 

         // CUBRID DB Connect

         Class.forName("cubrid.jdbc.driver.CUBRIDDriver");

         conn = DriverManager.getConnection("jdbc:cubrid:localhost:33000:demodb:::","","");

         conn.setAutoCommit(false);

 

         // GLO OID를 조회한다.

         String sql = "select photo from person where name='input.gif'";

         Statement stmt = conn.createStatement();

         ResultSet rs = stmt.executeQuery(sql);

         rs.next();

         CUBRIDOID glo_oid = (CUBRIDOID)rs.getObject("photo"); //1

         rs.close();

         stmt.close();

 

         // file InputStream으로 만든다.

         inputfile = new FileInputStream("2004000090.jpg"); //2

         // GLO에 데이터를 입력한다.

         glo_oid.saveGLO(inputfile);    //3

         inputfile.close();

         System.out.println("데이터가 수정되었습니다.");

         conn.commit();

         conn.close();

      } catch ( SQLException e ) {

         conn.rollback();

         System.err.println(e.getMessage());

      } catch ( Exception e ) {

         conn.rollback();

         System.err.println(e.getMessage());

      } finally {

         try {

           if ( conn != null ) conn.close();

         } catch ( SQLException e ) {

           System.err.println(e.getMessage());

         }

      }

   }

}

·      1 저장된 GLO 데이터의 OID를 조회한다.

·      2 시스템 상의 파일을 데이터베이스에 GLO로 입력하기 위해 InputStream으로 만든다.

·      3 saveGLO(InputStream_name) API를 이용해 새로운 파일 데이터로 수정한다.

데이터 가져오기

본 절에서는 저장된 데이터를 시스템 상의 특정 경로에 파일로 만들어 주는 방법을 설명한다.

selectGLO.java

import java.sql.*;

import java.io.*;

import cubrid.sql.*;

 

public class selectGLO {

   public static void main(String[] args) throws Exception {

 

      Connection conn = null;

      FileOutputStream outputfile = null;

      try {

 

         // CUBRID DB Connect

         Class.forName("cubrid.jdbc.driver.CUBRIDDriver");

         conn = DriverManager.getConnection("jdbc:cubrid:localhost:33000:demodb:::","","");

         conn.setAutoCommit(false);

 

         // GLO OID를 조회한다.

         String sql = "select photo from person where name='input.gif'";

         Statement stmt = conn.createStatement();

         ResultSet rs = stmt.executeQuery(sql);

         rs.next();

         CUBRIDOID glo_oid = (CUBRIDOID)rs.getObject("photo"); //1

         rs.close();

         stmt.close();

// file OutputStream으로 만든다.

         outputfile = new FileOutputStream("output.gif");   //2

         // loadGLO를 이용해 지정 경로에 GLO를 파일로 만들어 준다.

         glo_oid.loadGLO(outputfile);    //3

         outputfile.close();

 

        System.out.println("데이터가 조회되었습니다.");

         conn.commit();

         conn.close();

      } catch ( SQLException e ) {

         conn.rollback();

         System.err.println(e.getMessage());

      } catch ( Exception e ) {

         conn.rollback();

         System.err.println(e.getMessage());

      } finally {

         try {

           if ( conn != null ) conn.close();

         } catch ( SQLException e ) {

           System.err.println(e.getMessage());

         }

      }

   }

}

·      1 저장된 GLO 데이터의 OID를 조회한다.

·      2 OutPutStream을 생성한다.  이때 저장할 경로 및 파일명을 설정한다.

·      3 loadGLO(OutputStream_name) API를 이용해 데이터베이스의 GLO 데이터를 파일로 만든다.


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
126 기타 CUBRID 2008 R4.0 GA 버전의 주요 기능만 요약한 PPT 문서 file admin 2011.07.14 15462
125 기타 CUBRID 2008 R4.0 파라미터 변경 사항 (일부) file admin 2011.07.14 13154
124 기타 CUBRID 볼륨 공간 재사용률 비교 - 2008 R3.1 vs. 2008 R4.0 file admin 2011.07.14 16555
123 튜닝 SNS 유형 서비스에서 CUBRID와 MySQL 조회 성능 비교 file admin 2011.07.14 21188
122 튜닝 CUBRID 2008 R4.0의 커버링 인덱스(covering index)는 무엇인가? file admin 2011.07.14 29883
121 튜닝 [질의튜닝]order by desc가 인덱스 타게 하려면 admin 2011.07.14 28483
120 튜닝 CUBRID 세미나 자료(개요 및 SQL 활용) file admin 2011.07.14 22771
119 PHP apache, php rpm package 생성 시 필요한 rpm 스펙 file admin 2011.07.14 25236
118 Install CUBRID Windows버전 삭제 및 재설치 실패시 강제 삭제하는 방법입니다. admin 2011.07.14 29550
117 PHP MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기(CUBRID 2008 R3.1) 손승일 2011.03.30 24446
116 PHP phpize 를 이용한 PHP 모듈 설치 - LINUX file 남재우 2011.03.08 23090
115 PHP apache, PHP 설치하기 - LINUX file 남재우 2011.03.08 31308
114 기타 CUBRID에서의 BLOB/CLOB 타입 사용법 cubebridge 2011.03.08 30453
113 Install CUBRID 설치 안내 - LINUX 남재우 2011.03.08 30415
112 기타 데이터베이스 생성하기 file 남재우 2011.03.07 29108
111 기타 CUBRID 활용 - 질의 튜닝 사례 중심 file cubrid 2010.12.02 45962
110 기타 CUBRID Migration Toolkit 튜토리얼 file cubrid 2010.10.22 30477
109 기타 CUBRID 2008 R3.0 추가기능 file janus 2010.09.03 15455
108 기타 트랜잭션과 LOCK 초급과정 정만영 2010.07.01 20760
107 PHP IIS에서 PHP, CUBRID 사용하기 file 남재우 2010.04.19 30311
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales