BLOB字段的写入
数据库执行脚本:
create table bxxx( id int primary key , image blob );
方法一:(JDBC2.0 规范)
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class BlobDemo01 { public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL"; public static final String DBUSER = "scott"; public static final String DBPASSWORD = "tiger"; public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; String sql = "insert into bxxx values(?,?)"; File f = new File("d:"+File.separator+"5586.jpg"); InputStream in = null; try { in = new FileInputStream(f); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { Class.forName(DBDRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); conn.setAutoCommit(false); pstmt = conn.prepareStatement(sql); pstmt.setInt(1,1); pstmt.setBinaryStream(2,in,(int)f.length()); if(pstmt.executeUpdate()>0){ System.out.println("OK"); conn.commit(); conn.setAutoCommit(true); } } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally{ try { in.close(); pstmt.close(); conn.close(); } catch (IOException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } }
方法二:(古老)
1. 设置不自动提交
2.插入一个空的blob
3.使用行级锁定blob字段
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.PrintStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import oracle.sql.BLOB; public class BlobDemo02 { public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL"; public static final String DBUSER = "scott"; public static final String DBPASSWORD = "tiger"; public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql1 = "insert into bxxx values(1,empty_blob())"; String sql2 = "select image from bxxx where id = 1 for update"; File f = new File("d:"+File.separator+"5586.jpg"); try { Class.forName(DBDRIVER); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); conn.setAutoCommit(false); pstmt = conn.prepareStatement(sql1); pstmt.executeUpdate(); pstmt = conn.prepareStatement(sql2); rs = pstmt.executeQuery(); while(rs.next()){ oracle.sql.BLOB blob = (BLOB) rs.getBlob(1); PrintStream out = new PrintStream(blob.getBinaryOutputStream()); BufferedInputStream in = null; in = new BufferedInputStream(new FileInputStream(f)); byte[] b = new byte[512]; int temp = 0; while((temp=in.read(b))!=-1){ out.write(b,0,temp); } out.flush(); in.close(); out.close(); conn.commit(); conn.setAutoCommit(true); } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } System.out.println("OK!"); } }
BLOB字段的读取
方法一:
import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.imageio.ImageIO; public class BlobDemo03 { public static void main(String[] args) { PreparedStatement ps = null; ResultSet rs = null; String sql = "select image from bxxx where id=1"; Connection conn = null; File f = new File("d:"+File.separator+"yyyy.jpg"); try { Class.forName("oracle.jdbc.driver.OracleDriver" ); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger"); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ Blob blob =rs.getBlob(1); OutputStream out = new FileOutputStream(f); BufferedImage image = ImageIO.read(blob.getBinaryStream()); ImageIO.write(image,"jpg",out); } System.out.println("ok"); } catch (Exception e) { e.printStackTrace(); } finally{ try { ps.close(); rs.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
方法二:
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class BlobDemo04 { public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = "select image from bxxx where id = 3"; File f = new File("d:"+File.separator+"xxxx.jpg"); try { Class.forName("oracle.jdbc.driver.OracleDriver" ); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger"); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()){ InputStream in = rs.getBinaryStream(1); OutputStream out = new FileOutputStream(f); int temp = 0; byte[] b = new byte[512]; while((temp=in.read(b))!=-1){ out.write(b,0,temp); } out.flush(); out.close(); in.close(); System.out.println("OK!"); } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); pstmt.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
已有 0人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐