当前位置: 技术问答>java相关
大家来看看是不是oracle jdbc的bug?
来源: 互联网 发布时间:2015-07-01
本文导语: 我需要对数据库进行文件存储操作,我的数据库是oracle的,但我想完成的代码不依赖特定数据库,因此使用下面的代码: InputStream fin = null; OutputStream fout = null; try{ File f = new File("g:/file.txt"); ...
我需要对数据库进行文件存储操作,我的数据库是oracle的,但我想完成的代码不依赖特定数据库,因此使用下面的代码:
InputStream fin = null;
OutputStream fout = null;
try{
File f = new File("g:/file.txt");
fin = new FileInputStream(f);
System.out.println("file =="+f.getName());
System.out.println("file.length=="+fin.available());
//连接数据库
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String sUrl = "jdbc:oracle:thin:@192.168.5.80:1521:test";
Connection con = DriverManager.getConnection(sUrl,"test","test");
//插入空文件
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.execute("INSERT INTO TMP_BLOB VALUES ('11', empty_blob())");
stmt.close();
//插入文件
//问题出在这儿
PreparedStatement pstmt = con.prepareStatement("update TMP_BLOB set BLOBFIELD = ? where id ='11'");
pstmt.setBinaryStream(1,fin,fin.available());
pstmt.setBlob(1,blob);
pstmt.executeUpdate();
pstmt.close();
fin.close();
con.commit();
System.out.println("commited!");
}catch(Exception e){
e.printStackTrace();
}
////////////////////////////////////////////
我试了好几次,在oracle中文件插入不进去,得到的blob是空值。而我用oracle自带的oracle.sql.BLOB那种方法就没问题,这是不是oracle的jdbc有问题呀?
而且不知这是不是标准的通用的插入文件类型数据的方法,有用其他数据库的大虾插入文件的吗?说说你们的方法好吗?
InputStream fin = null;
OutputStream fout = null;
try{
File f = new File("g:/file.txt");
fin = new FileInputStream(f);
System.out.println("file =="+f.getName());
System.out.println("file.length=="+fin.available());
//连接数据库
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String sUrl = "jdbc:oracle:thin:@192.168.5.80:1521:test";
Connection con = DriverManager.getConnection(sUrl,"test","test");
//插入空文件
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.execute("INSERT INTO TMP_BLOB VALUES ('11', empty_blob())");
stmt.close();
//插入文件
//问题出在这儿
PreparedStatement pstmt = con.prepareStatement("update TMP_BLOB set BLOBFIELD = ? where id ='11'");
pstmt.setBinaryStream(1,fin,fin.available());
pstmt.setBlob(1,blob);
pstmt.executeUpdate();
pstmt.close();
fin.close();
con.commit();
System.out.println("commited!");
}catch(Exception e){
e.printStackTrace();
}
////////////////////////////////////////////
我试了好几次,在oracle中文件插入不进去,得到的blob是空值。而我用oracle自带的oracle.sql.BLOB那种方法就没问题,这是不是oracle的jdbc有问题呀?
而且不知这是不是标准的通用的插入文件类型数据的方法,有用其他数据库的大虾插入文件的吗?说说你们的方法好吗?
|
pstmt.setBinaryStream(1,fin,fin.available());
pstmt.setBlob(1,blob);
为什么需要以上两句!?!
pstmt.setBlob(1,blob);
为什么需要以上两句!?!