我编写了一个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();
}
}
}
}
答案 0 :(得分:2)
This external discussion thread表示它可能是jdbc驱动程序问题。他们建议更新oracle jdbc瘦驱动程序。
答案 1 :(得分:0)
我也面临同样的问题我无法上传超过2kb的文件...将oracle jdbc驱动程序升级到ojdbc5.jar解决了这个问题。