2010-08-18 6 views
-2

자바 데이터베이스 프로그램에 이미지를 삽입 할 수있는 Java 프로그램을 작성했습니다. 다른 시스템에서는 완벽하게 작동하지만 2KB를 초과하는 크기의 이미지를 삽입하려는 경우 시스템에서 작동하지 않습니다. 그러나 내 시스템에서는 어떤 크기의 이미지도 검색 할 수 있습니다. 동일한 응용 프로그램이 다른 시스템에서는 잘 작동하지만 비정상적으로 작동하며 2KB보다 큰 이미지를 삽입하려고하면 소켓 예외에서 읽을 수없는 경우가 있습니다. 도와주세요.Java에서 데이터베이스에 BLOB 업로드

나는 typ4 드라이버를 사용하고 있습니다. 다음

내 테이블 구조 ::

Name             Null? Type 
----------------------------------------------------- -------- ---------------------- 
NAME             NOT NULL VARCHAR2(20) 
DESCRIPTION           NOT NULL VARCHAR2(20) 
IMAGE             NOT NULL BLOB 

다음은 이미지를 삽입하는 내 자바 프로그램입니다 다음과 같다. 동일한 Oracle 서버에 연결된 동일한 네트워크의 다른 시스템에서도 작동합니다. 하지만 크기가 2kb 이상인 이미지를 업로드하려고 할 때 문제가 나타나는 시스템에서.

package com.smruti.image; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
import java.sql.*; 

public class InsertImage { 
    private static String url = "jdbc:oracle:thin:@server3:1521:server3"; 
    private static String username = "system"; 
    private static String password = "manager"; 

    public static void main(String[] args) throws Exception { 
    Connection conn = null; 
    InputStream fis = null; 
    try { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     conn = DriverManager.getConnection(url, username, password); 
     conn.setAutoCommit(false); 

     String sql = "INSERT INTO pictures VALUES (?, ?, ?)"; 
     PreparedStatement stmt = conn.prepareStatement(sql); 
     stmt.setString(1, "scare.jpg"); 
     stmt.setString(2, "scare image"); 

     File image = new File("C:\\images.jpeg"); 
     fis = new FileInputStream(image); 
     int ilen=(int) image.length(); 
     System.out.println(ilen); 
     System.out.println(fis); 
     stmt.setBinaryStream(3, fis, ilen); 
     stmt.execute(); 

     System.out.println("this is upto b4 commit"); 
     conn.commit(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (fis != null) { 
      fis.close(); 
     } 
     if (conn != null && !conn.isClosed()) { 
      conn.close(); 
     } 
    } 
    } 
} 
+1

일부 Java 코드를 표시 할 수 있습니까? –

+0

이미지를 삽입하는 테이블 정의 및 Java 코드와 같은 더 많은 정보를 제공해야합니다. –

답변

0

나는 2KB 이상의 파일을 업로드 할 수없는 동일한 문제에 직면했다. oracledbdb 드라이버를 ojdbc5.jar로 upadting하면이 문제가 해결되었다.

2

This external discussion thread은 jdbc 드라이버 문제 일 수 있음을 나타냅니다. 오라클 jdbc 씬 드라이버를 업데이트하는 것이 좋습니다.

관련 문제