用blob把文件插入oracle时,出现Io 异常: Connection reset blob
如题。
代码如下:
package demo;
import java.sql.*;
import java.io.*;
import oracle.sql.BLOB;
import oracle.jdbc.*;
import com.database.DbDAO;
public class Orablob extends DbDAO{
private static Orablob inform;
public static synchronized Orablob getInstance()
{
if (inform == null)
inform = new Orablob();
return inform;
}
public void insertblob()
{
try
{
//首先是将文件输入到数据库。
Class.forName( "oracle.jdbc.driver.OracleDriver ");//注册数据库引擎。
Connection conn= DriverManager.getConnection( "dburl=jdbc:oracle:thin:@10.1.92.100:1521:oradb ", "DEW ", "MARBLE ");//建立连接串
conn.setAutoCommit(false);//关闭自动提交,以提高性能。
Statement stmt=conn.createStatement();//建立会话
File file=new File( "D:\\laod-balancing.doc ");
InputStream is=new FileInputStream(file);//创建输入流,将外部文件输入到InputStream 中。
System.out.print(file.length());
byte[] blobByte=new byte[is.available()];
is.read(blobByte);
is.close();
PreparedStatement pstmt=conn.prepareStatement( "INSERT INTO DEW.T_FILE VALUES (?,?) ");
pstmt.setString(1, "1230110 ");
pstmt.setBinaryStream(2,(new ByteArrayInputStream(blobByte)), blobByte.length);
pstmt.executeUpdate();//将文件流插入到数据库中。
System.out.print( "测试 "); //执行到这里就不行了;
pstmt.close();
System.out.print( "以下是从库中读取文件。 ");
ResultSet rset=stmt.executeQuery( "SELECT * from DEW.T_FILE ");
while (rset.next())
{// Get LOB locators into Java wrapper classes.
BLOB blob=((OracleResultSet)rset).getBLOB(2);//获取文件字段。
// int chunk=blob.getChunkSize();
int chunk=blob.getChunkSize();
byte [] buffer=new byte[chunk];
System.out.println(chunk);
File binaryFile=new File( "D:\\test.doc ");
FileOutputStream fileoutstream=new FileOutputStream(binaryFile);//创建文件输出流。
InputStream instream=blob.getBinaryStream();//建立输入流,并将字段comment的值以流的形式,放入instream变量。
instream.read(buffer,0,chunk);//将文件流存入变量buffer,以buffer为中转
fileoutstream.write(buffer,0,chunk);//将buffer写入文件输出流。
System.out.println( "write ok! ");
instream.close();//关闭流
fileoutstream.close();
}
rset.close();
stmt.close();
conn.close();
System.out.print( "ok ");
}
catch(Exception ee)
{
System.out.println(ee.getMessage());
}
}
public static void main(String args[])
{Orablob test=getInstance() ;
test.insertblob();
}
}
输出结果很简单:6489 Io 异常: Connection reset
6489是文件长度。
[解决办法]
lz的连接url好象不对。修改如下试试:
Connection conn= DriverManager.getConnection( "jdbc:oracle:thin:@10.1.92.100:1521:oradb ", "DEW ", "MARBLE ");//建立连接串
[解决办法]
PreparedStatement pstmt=conn.prepareStatement( "INSERT INTO DEW.T_FILE VALUES (?,?) ");
pstmt.setString(1, "1230110 ");
pstmt.setBinaryStream(2,(new ByteArrayInputStream(blobByte)), blobByte.length);
pstmt.executeUpdate();//将文件流插入到数据库中。
System.out.print( "测试 "); //执行到这里就不行了;
你这是sqlserver的写法,oracle跟这个写法有十万八千里的差别,自己google一下吧