在Java中将blob上载到数据库

时间:2010-08-18 15:42:29

标签: java oracle image

我编写了一个java程序,我可以将图像插入到我的Oracle数据库blob中。当我想插入大小超过2kb的图像时,它在其他系统上完美运行,但在我的系统中无效。但是从我的系统中我可以检索任何大小的图像。相同的应用程序在其他系统中运行良好但行为异常,并且当我尝试插入大于2 kb的图像时,有时无法读取套接字异常。请帮忙。

我正在使用typ4驱动程序。

以下是我的表结构::

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

以下是我的Java程序插入图像。同样,它适用于同一网络中的其他系统,这些系统连接到同一个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();
        }
    }
  }
}

2 个答案:

答案 0 :(得分:2)

This external discussion thread表示它可能是jdbc驱动程序问题。他们建议更新oracle jdbc瘦驱动程序。

答案 1 :(得分:0)

我也面临同样的问题我无法上传超过2kb的文件...将oracle jdbc驱动程序升级到ojdbc5.jar解决了这个问题。