`
izuoyan
  • 浏览: 9219365 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle10g BLOB数据插入问题浅议

阅读更多

在Oracle中大数据类型一般常用oracle.sql.BLOB来表示,不同于mysql中的通用的java.sql.Blob接口,因此在插入图片数据到oracle的时候不能直接插入图片,一般采用oracle的empty_blob()函数,先生成空的BLOB对象插入到表中,然后再读取该记录,重新update图片数据到相应字段中;

举例如下:

创建表sql语句
drop sequence seq_changedata_infoid;
create sequence seq_changedata_infoid increment by 1 start with 1;
CREATE TABLE changedata_info (
id number(20) NOT NULL ,
version_id varchar2(20) not null,
sql_id number(20) default NULL,
sql_content varchar2(256) default NULL,
photo blob,
PRIMARY KEY (id)
);

直接sql插入语句为:

insert into changedata_info(id,version_id,sql_id,sql_content,photo)values(1,'1200',1,'update ....',empty_blob())

程序代码如下:

public static void main(String[] args){


BLOB blob = null; //图片类型
OutputStream outputStream = null; //输出流
File file = null; //文件
InputStream inputStream = null; //输入流

ResultSet rs = null;
Statement sm = null;
Statement smt = null;
ResultSet rr = null;

try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager
.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl",
"system", "admin");

con.setAutoCommit(false); //事物由程序员操作
String sql = "";



//DesEncrypt tm = new DesEncrypt();
//tm.getKey("aabb");
//String strDes = "";
//String str ="";

for(int i =8;i<11;i++){

int id ;
id = 1000 + i;
String version_id = "20080813060839";

int sql_id = i;

String sql_content = "update ticketinfo set name = mingtian where id = 50006";

String sqlInsert = "insert into changedata_info(id,version_id,sql_id,sql_content,photo)values("
+ id
+","
+ version_id
+ ","
+ sql_id
+ ",'"
+ sql_content
+ "',"
+ "empty_blob()"
+ ")";

//con.setAutoCommit(false); //事物由程序员操作
smt = con.createStatement();

//rs = sm.executeQuery(sqlInsert);//插入数据 ---当前图片为空
smt.execute(sqlInsert);

String sqlUpdate = "select photo from changedata_info where id='" + id + "'";

sm = con.createStatement();
ResultSet r= sm.executeQuery(sqlUpdate + " for update");
if (r.next()) {
blob = (BLOB) r.getBlob(1);
byte [] photo = r.getBytes("photo");
outputStream = blob.getBinaryOutputStream();
file = new File("c:\\11\\photo.jpg");//c:\\11\\photo.jpg
inputStream = new FileInputStream(file);
byte[] b = new byte[blob.getBufferSize()];
int len = 0;
while ((len = inputStream.read(b)) != -1) {
System.out.println(len);
outputStream.write(b, 0, len);
}
}



}
con.commit();
con.close();




} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}

此代码经过测试,与mysql的图片插入做过比较之后有所感悟,所以唠叨一下....;-)

分享到:
评论

相关推荐

    ORACLE 10g 数据类型

    Oracle 10g 数据类型是数据库管理的基础,它定义了数据在存储和处理时的格式。Oracle 提供了丰富的数据类型来满足各种数据存储需求,主要包括字符型、数值型、日期时间型和大对象型。 1. 字符型 字符型数据类型包括...

    Oracle 10G 参考手册 Oracle SQL Reference pdf

    3. **数据类型**: Oracle 10G支持多种数据类型,包括数值类型(如NUMBER,INTEGER),字符类型(如VARCHAR2,CHAR),日期时间类型(DATE,TIMESTAMP),二进制类型(BLOB,CLOB)等。理解这些数据类型对于正确地...

    Oracle clob和blob在jdbc的应用

    在数据插入部分,我们使用`PreparedStatement`对象,这是为了提高性能和安全性。与`Statement`对象不同,`PreparedStatement`可以预编译SQL语句,减少了数据库解析SQL的时间。此外,它支持占位符(?),使得我们可以...

    oracle10g培训讲义

    Oracle 10g支持标准SQL语言,用于数据查询、插入、更新和删除。同时,它还提供了一种过程式语言PL/SQL,用于编写存储过程、函数、触发器等,实现更复杂的业务逻辑。学习者需要掌握SQL的基本语法和PL/SQL的编程技巧。...

    Oracle 11g数据库应用简明教程

    2. SQL*Plus:这是Oracle提供的命令行工具,用于执行SQL语句和PL/SQL块,进行数据库查询、数据插入、更新和删除等操作。 3. 数据类型:Oracle支持多种数据类型,包括数值类型(如NUMBER)、字符串类型(如VARCHAR2...

    精通oracle 10g plsql 编程-学习笔记

    通过以上介绍,我们可以看出Oracle 10g的PL/SQL不仅具备强大的数据处理能力,而且还提供了一系列高级特性和优化手段,帮助开发者构建高效稳定的应用程序。深入学习PL/SQL对于提升数据库应用的性能和安全性具有重要...

    oracle10g训练题

    1. **数据类型**:Oracle 10g支持多种数据类型,如NUMERIC(数字)、VARCHAR2(可变字符)、DATE(日期)和BLOB(大对象)等,选择正确的数据类型对数据库设计至关重要。 2. **SQL语法**:包括SELECT语句用于查询...

    oracle 11g 官方演示模式store sql 脚本

    SQL是用于管理关系数据库的语言,包括数据查询、数据更新、数据插入和数据删除等操作。在Oracle 11g中,SQL不仅可以进行基本的数据操作,还可以用于创建和管理表、视图、索引、存储过程、触发器等数据库对象。此外,...

    Oracle 10g基础教程第二版PPT和示例代码

    3. **数据类型**:Oracle 10g支持多种数据类型,如数值型(NUMBER)、字符型(VARCHAR2、CHAR)、日期时间型(DATE)、二进制大对象(BLOB)等。选择合适的数据类型对于存储效率和数据准确性至关重要。 4. **表的...

    Oracle Database 10g SQL 开发指南 源代码.rar

    Oracle 10g引入了物化视图和行链接,以提高数据插入和更新的效率。此外,SQL事务处理也非常重要,确保数据的一致性和完整性。 3. 数据定义:CREATE、ALTER和DROP语句用于创建、修改和删除数据库对象,如表、索引、...

    精通Oracle.10g.PLSQL编程

    br&gt;精通Oracle 10g PL/SQL编程 &lt;br&gt; 【作 者】王海亮 林立新 于三禄 郑建茹 【丛 书 名】 万水Oracle技术丛书 &lt;br&gt;http://images.china-pub.com/ebook20001-25000/21975/shupi.jpg&lt;br&gt;&lt;br&gt;PL/SQL是...

    ORA-01461 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

    例如,如果您使用的是 Oracle 10g 数据库,那么需要将 classes12.jar jar 包拷贝在应用程序的 lib 文件夹中;如果您使用的是 Oracle 11g 数据库,那么需要将 ojdbc5.jar jar 包拷贝在应用程序的 lib 文件夹中。如果...

    Oracle Call Interface Programmer's Guide 10g Release 2(10.2)

    《Oracle Call Interface Programmer's Guide 10g Release 2(10.2)》是Oracle数据库开发者的重要参考资料,主要介绍了如何使用Oracle Call Interface (OCI)进行应用程序开发。OCI是Oracle提供的一种C语言接口,允许...

    ORACLE数据库中主要字段类型的读写例子(包括:Long、Raw、Blob).pdf

    在Oracle 10g及更高版本中,建议使用Clob类型代替Long,因为Clob提供了更好的性能和功能。 2. Raw类型: Raw数据类型用于存储二进制数据,如MAC地址或加密的密码。它是一个固定长度的字节序列,长度可以从1到2000...

    Base64及oracle11g的jar.zip

    总之,Base64编码和Oracle 11g的CLOB数据类型在Java开发中扮演着重要角色,特别是在处理大量文本和二进制数据时。结合Apache Commons Codec库,可以高效地实现数据的编码、解码和存储。正确理解和使用这些技术,能...

    利用Java向Oracle中插入图片&#40;BLOB&#41;文件.doc

    ### 使用Java向Oracle数据库插入图片(BLOB)文件 #### 一、概述 本文将详细介绍如何使用Java通过JDBC向Oracle数据库中插入图片文件的方法。此过程涉及到的主要技术包括Java编程语言、Oracle数据库以及JDBC驱动。...

    精通Oracle10编程

    Oracle 10g是Oracle公司推出的一款关系型数据库管理系统,其强大的功能和高效的数据处理能力在业界享有盛誉。对于初学者来说,掌握Oracle 10g编程是踏入数据库管理领域的关键步骤。以下将详细讲解Oracle 10g的一些...

Global site tag (gtag.js) - Google Analytics