database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 17429 게시물 읽기
No. 17429
blob 사용에 질문 있습니다.
작성자
홍길동(whiteili)
작성일
2004-02-17 12:13ⓒ
2004-02-17 15:29ⓜ
조회수
12,864

안녕하세요...

blob으로 파일첨부하는 게시판을 만들고 있습니다.

 

다름이 아니오라 업로드시에 6Kbyte이상되는 파일을 첨부하게 되면

" IO 예외 상황: End of TNS data channel "이라는 에러가 나옵니다.

 

6Kbyte이하 파일은 에러 없이 잘 첨부 됩니다.

 

여러 q&a를 다 찾아 보았지만 해당 에러에 대한 답은 jdbc드라이버 classpath를 다시 설정해 주라는것만 있어서

jdbc드라이버 classpath를 변경해 보았지만 안됩니다...(T,T)

 

혹시 오라클에서 세팅을 해주어야 합니까?

오라클은 8.1.7을 쓰고 있고 톰캣은 4.0.4입니다.

고수님들 조언 부탁드립니다...

 

몇일동안 여기저기 찾아 봤지만 해결을 못하고 있습니다.

초보좀 구해주세요~~

 

BLOB에 대한 자료가 있으시면 알려주시면 감사하겠습니다.

그럼 좋은 하루 보내시고 감사합니다....

 

CREATE TABLE IGS_FILE (
  IF_NID    NUMBER (8)    NOT NULL,
  IF_IID    NUMBER (8)    NOT NULL,
  IF_BID    NUMBER,
  IF_ORDER  NUMBER,
  IF_PATH   VARCHAR2 (60),
  IF_NAME   VARCHAR2 (100),
  IF_SIZE   VARCHAR2 (20),
  IF_KIND   VARCHAR2 (40),
  IF_FILE   BLOB ) ;

 

 

 

  String paramname = "";
  int fborder = 0;
  String fbpath = "";
  String fbname = "";
  String fbsize = "";
  String fbkind = "";
  File fblob = null ;

  Enumeration files = mrequest.getFileNames();
  while (files.hasMoreElements()) {
    paramname = (String)files.nextElement();

    fblob = mrequest.getFile(paramname);
    fbpath = mrequest.getFilesystemName(paramname);
    fbkind = mrequest.getContentType(paramname);

    if (fblob != null) {
      fbname = fblob.getName();
      fbsize = Long.toString(fblob.length());

   try{
   pstmt = conn.prepareStatement("INSERT INTO IGS_FILE values(? , ? ,? ,? ,? ,? ,? ,? ,?)");
   pstmt.setInt(1, max_id);
   pstmt.setInt(2, Integer.parseInt(strcid));
   pstmt.setInt(3, Integer.parseInt(strboardid));
   pstmt.setInt(4, fborder++);
   pstmt.setString(5, "");
   pstmt.setString(6, fbname);
   pstmt.setString(7, fbsize);
   pstmt.setString(8, fbkind);

/***************BLOB**************/  

   if( fblob == null) {
     pstmt.setBinaryStream (9, null, 0);
   }else{
     pstmt.setBinaryStream (9, new FileInputStream (fblob), (int)fblob.length ());
   }

/******************************/
   pstmt.execute();
   }catch(SQLException e){
        out.print(e);
   }catch(IOException ex){
       out.print(ex);
   }

 

 

   }//if
  }//while

 

이 글에 대한 댓글이 총 2건 있습니다.

음...자세히는 잘 모르겠지만...

문서를 보니...jdbc 드라이버하고 클래스 패스를 다시 설치해 주라고 나와 있던데요..^^;

You need to have the JDBC classes111.zip (for JDK 1.1.x) or classes12.zip (for JDK 1.2 or later) in your CLASSPATH environment variable. The following command line should print out the methods on the OracleDriver class.

     javap oracle.jdbc.driver.OracleDriver

 

이건 당연히 해주셨을거라 믿는데요..^^:

 

그럼 혹..도움이 될지 몰라..

 

http://otn.oracle.com/tech/java/sqlj_jdbc/htdocs/faq.html#translationerrors

이곳을 함 보시죠..도움이 되시길..

 

사이버님이 2004-02-17 14:00에 작성한 댓글입니다. Edit

감사합니다...

해결은 안되었는데...^^;

그래도 희망이 보입니다...*^^*

 

    try{
    conn.setAutoCommit(false);
    pstmt = conn.prepareStatement("INSERT INTO IGS_FILE values(? , ? ,? ,? ,? ,? ,? ,? ,empty_blob())");
    pstmt.setInt(1, max_id);
    pstmt.setInt(2, Integer.parseInt(strcid));
    pstmt.setInt(3, Integer.parseInt(strboardid));
    pstmt.setInt(4, fborder);
    pstmt.setString(5, "");
    pstmt.setString(6, fbname);
    pstmt.setString(7, fbsize);
    pstmt.setString(8, fbkind);
    pstmt.execute();
    pstmt.close();

    ResultSet rset = null;
    String sql=" select if_file from IGS_FILE where if_nid="+max_id+" and if_iid="+Integer.parseInt(strcid)+" and if_bid="+Integer.parseInt(strboardid)+" and if_order="+fborder+" FOR UPDATE ";

    rset =stmt.executeQuery(sql);

    if(rset.next()){

     BLOB blob = ((OracleResultSet)rset).getBLOB(1);
     fileup=new File(temppath+fbpath);
     OutputStream outstream = blob.getBinaryOutputStream();
     InputStream blobStream=new FileInputStream(fileup);

     byte[] buffer = new byte[10*1024];
     int nread=0;

     while((nread=blobStream.read(buffer)) != -1) outstream.write(buffer,0,nread);

     blobStream.close();
     outstream.close();
    }
    conn.commit();

    }catch(SQLException e){
     conn.rollback();
    out.print(e);
    }catch(IOException ex){
     conn.rollback();
    out.print(ex);
    }finally{
    conn.setAutoCommit(true);
    }

 

이렇게 하면 되더라구요...^^;

홍길동(whiteili)님이 2004-02-18 14:20에 작성한 댓글입니다.
이 댓글은 2004-02-18 15:37에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
17432오라클 설치가 안되요 ㅡ.ㅡ [1]
choikisu
2004-02-17
1356
17431PL/SQL에서 이 에러좀 봐 주세요.. [2]
돈세자
2004-02-17
1476
17430중복에 관한건데요 [2]
lee
2004-02-17
2321
17429blob 사용에 질문 있습니다. [2]
홍길동
2004-02-17
12864
17428JOIN + SUM [1]
KHS
2004-02-17
1169
1742710진수<->62진수
은경이
2004-02-17
3042
17426toad 에서 table 생성 script 보려면 "ORA-01460: 요구된 변환은 실행될 수 없습니다" 애러나요. [3]
서지수
2004-02-17
11865
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2025 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v17.5로 자료를 관리합니다