Java codepackage test;
import java.sql.*;
import java.io.*;
import oracle.sql.*;
public class WriteBlob {
public static void main(String[] args){
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhos:1251:test","test","test");
conn.setAutoCommit(false);
BLOB blob = null;
PreparedStatement pstmt = conn.prepareStatement("insert into javatest values(?,empty_blob())");
pstmt.setString(1,"test.jpg");
pstmt.executeUpdate();
pstmt.close();
pstmt = conn.prepareStatement("select content from javatest where name= ? for update");
pstmt.setString(1,"test.jpg");
ResultSet rset = pstmt.executeQuery();
if (rset.next()) blob = (BLOB) rset.getBlob(1);
String fileName = "d:/2475.jpg";
File f = new File(fileName);
FileInputStream fin = new FileInputStream(f);
System.out.println("file size = " + fin.available());
pstmt = conn.prepareStatement("update javatest set content=? where name=?");
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);
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());
}
}
}
------解决方案--------------------
mark
------解决方案--------------------
循环记录集,取出相应字段的值,在打印在表格内,关于解析大字段可以专门写一个方法,需要显示大字段的时候就调用那个解析方法。
具体解析可以参照楼上的解析方法。
另外如果大字段存储的是图片的话是不能直接在表格中显示的,必须专门做一个页面,在那个页面上解析图片,再把显示位置的地方加载解析图片的
页面,才能显示。