oracle blob字段中存储的是图片,请问怎样用java 代码读取并在jsp上显示
表字段 id int 、name varchar2 、content blob
在此谢过!
------解决方案--------------------
- Java code
package 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
------解决方案--------------------
循环记录集,取出相应字段的值,在打印在表格内,关于解析大字段可以专门写一个方法,需要显示大字段的时候就调用那个解析方法。
具体解析可以参照楼上的解析方法。
另外如果大字段存储的是图片的话是不能直接在表格中显示的,必须专门做一个页面,在那个页面上解析图片,再把显示位置的地方加载解析图片的
页面,才能显示。