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!"); } }
相关推荐
Struts用 JDBC Blob字段 保存和读取 Oracle 数据库 好用 试过 有详细注释
下面以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况。 先建立如下两个测试用的数据库表,Power Designer PD模型如下: 建表SQL语句为:CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)CREATE
在Oracle数据库存储超大文件时、以流的方式分段读取和保存,避免内存溢出。本工具类提供两个方法: 1、读取文件保存到Oracle数据库Blob字段(支持超大文件) 2、从数据库中读出大字段到文件中(分块读取)
JDBC读写Oracle的CLOB字段
java jdbc如何处理Oracle___BLOB字段,以备查阅
使用JDBC和Hibernate来写入Blob型数据到Oracle中;使用JDBC和Hibernate来写入Blob型数据到Oracle中
oracle中使用jdbc读写clob字段,很多细节介绍,内容全面。
针对oracle中blob字段的操作,能批量快速的插入大字段,效率非常高
最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。 blob字段直接用 select * from table_name where column like ‘%%'查找的时候是不能实现...
oracle的jdbc驱动程序,用这个版本的操作Clob,blob类型的数据很方便。 博文链接:https://zhenjw.iteye.com/blog/173419
本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。 总体实现 上传文件保存到T_FILE表中,T_FILE表结构...
在dbking中,所有的数据库数据只有五种数据类型,String、Number(BigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有...
11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8....
11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8....