package com.java;import java.sql.*;
import java.io.*; import com.data.test.DataBase;import oracle.sql.*;
public class Demo { public static void main(String[] args) { try {
DataBase db = new DataBase();
Connection conn = db.getConnection();
conn.setAutoCommit(false); BLOB blob = null; PreparedStatement pstmt = conn.prepareStatement("insert into test(id,image) values(?,empty_blob())");
pstmt.setString(1,"fankai");
pstmt.executeUpdate();
pstmt.close(); pstmt = conn.prepareStatement("select image from test where id= ? for update");
pstmt.setString(1,"fankai");
ResultSet rset = pstmt.executeQuery();
// if (rset.next()) blob = (BLOB) rset.getBlob(1);
if (rset.next()) blob = (BLOB) ((oracle.jdbc.driver.OracleResultSet)rset).getBlob(1);
String fileName = "d:/hua.jpg";
File f = new File(fileName);
FileInputStream fin = new FileInputStream(f);
System.out.println("file size = " + fin.available()); pstmt = conn.prepareStatement("update test set image=? where id=?"); OutputStream out = blob.getBinaryOutputStream(); int count = -1, total = 0;
byte[] data = new byte[(int)fin.available()];
fin.read(data);
out.write(data);
/*
byte[] data = new byte[blob.getBufferSize()]; 另一种实现方法,节省内存
while ((count = fin.read(data)) != -1) {
total += count;
out.write(data, 0, count);
}
*/ fin.close();
out.close(); pstmt.setBlob(1,(Blob) blob); //这里老是会报类型转换错误为什么啊???
pstmt.setString(2,"fankai"); pstmt.executeUpdate();
pstmt.close(); conn.commit();
conn.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println(e.getMessage());
}
} }
import java.io.*; import com.data.test.DataBase;import oracle.sql.*;
public class Demo { public static void main(String[] args) { try {
DataBase db = new DataBase();
Connection conn = db.getConnection();
conn.setAutoCommit(false); BLOB blob = null; PreparedStatement pstmt = conn.prepareStatement("insert into test(id,image) values(?,empty_blob())");
pstmt.setString(1,"fankai");
pstmt.executeUpdate();
pstmt.close(); pstmt = conn.prepareStatement("select image from test where id= ? for update");
pstmt.setString(1,"fankai");
ResultSet rset = pstmt.executeQuery();
// if (rset.next()) blob = (BLOB) rset.getBlob(1);
if (rset.next()) blob = (BLOB) ((oracle.jdbc.driver.OracleResultSet)rset).getBlob(1);
String fileName = "d:/hua.jpg";
File f = new File(fileName);
FileInputStream fin = new FileInputStream(f);
System.out.println("file size = " + fin.available()); pstmt = conn.prepareStatement("update test set image=? where id=?"); OutputStream out = blob.getBinaryOutputStream(); int count = -1, total = 0;
byte[] data = new byte[(int)fin.available()];
fin.read(data);
out.write(data);
/*
byte[] data = new byte[blob.getBufferSize()]; 另一种实现方法,节省内存
while ((count = fin.read(data)) != -1) {
total += count;
out.write(data, 0, count);
}
*/ fin.close();
out.close(); pstmt.setBlob(1,(Blob) blob); //这里老是会报类型转换错误为什么啊???
pstmt.setString(2,"fankai"); pstmt.executeUpdate();
pstmt.close(); conn.commit();
conn.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println(e.getMessage());
}
} }
你这里的blob变量是从哪里来的?在你的上下文中我都没看到这个变量,这里是否应该是data?