package net.qysoft;

import java.io.File;
import java.io.FileOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * java 中对Blob数据的操作数据库的创建代码:

* (1)db2 => create table blobTest ( id int not null generated always as identity, image blob  )

*添加用户java,密码java

* (2) db2=>! net
 * user java java /add java分配权限

*(3)db2 => grant select,insert,update,delete on
 * table weihuachao.blobTest to user java
 *
 *
 * @author weihuachao
 *  以下代码在microsoft 2003 系统,DB2 9.0中测试成功.
 *
 */

//类的定义开始------------------------------------------------------------

public class Test {

public static void main(String[] args) throws Exception {

Test test = new Test();
  Connection conn = test.createConnection();

// Blob对象的插入的方法:
  try {

// 创建插入语句.
   java.sql.PreparedStatement preparedStatement = conn
     .prepareStatement("insert into weihuachao.blobTest(image)values(?)");

//创建文件对象:
   
   File file=new File("c:/a.jpg");

// 创建流对象:
   java.io.BufferedInputStream imageInput = new java.io.BufferedInputStream(
     new java.io.FileInputStream(file));

//参数赋值:
   preparedStatement.setBinaryStream(1, imageInput,(int) file.length());

//执行语句
   preparedStatement.executeUpdate();
   
   
   
   //------------------------------------------------------------------
   //Blob的读取工作:

java.sql.Statement st=conn.createStatement();

java.sql.ResultSet rs=st.executeQuery("select image from weihuachao.blobTest");

while(rs.next())
   {
    //读取Blob对象
    Blob blob= (Blob) rs.getBlob(1);

//Blob对象转化为InputStream流
    java.io.InputStream inputStream =blob.getBinaryStream();

//要写入的文件
    File fileOutput = new File("c:/backa.jpg");

//文件的写入流的定义
    FileOutputStream fo = new FileOutputStream(fileOutput);

int c;
    //读取流并写入到文件中
    while ((c = inputStream.read()) != -1)
    fo.write(c);

//流的关闭:
    fo.close();

}

} catch (SQLException e) {

// TODO 自动生成 catch 块
   e.printStackTrace();
  }catch(java.io.FileNotFoundException ex)
  
  {
   
   ex.printStackTrace();
  }catch(java.io.IOException ex)
  {
   
   ex.printStackTrace();
  }
  finally
  {
   try {
    conn.close();
   } catch (SQLException e) {

// TODO 自动生成 catch 块
    e.printStackTrace();
   }
   
  }

}

/**
  * 定义数据库连接的方法
  *
  * @return
  */
 private Connection createConnection() {
  Connection conn = null;
  try {

Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");

conn = java.sql.DriverManager.getConnection("jdbc:db2:sample",
     "java", "java");

} catch (SQLException ex1) {
   ex1.printStackTrace();

} catch (ClassNotFoundException ex) {
   ex.printStackTrace();
  }
  return conn;
 }

}//结束.

总结: JAVA 对DB2中的BLOB对象的操作,主要是使用流的技术实现.对BLOB的实现主要步骤有:

(1)定义要写入的文件  File file=new File("c:/a.jpg");

(2)定义文件的写入流

java.io.BufferedInputStream imageInput = new java.io.BufferedInputStream(
     new java.io.FileInputStream(file));

(3)使用函数写入:

preparedStatement.setBinaryStream(1, imageInput,(int) file.length());

(4)执行SQL语句:

对BLOB的读取采取的步骤有:

(1)读取Blob的对象:  Blob blob= (Blob) rs.getBlob(1);

(2)把Blob的对象转化为流:

java.io.InputStream inputStream =blob.getBinaryStream();
(3)定义要写入的文件
    File fileOutput = new File("c:/backa.jpg");
(4)文件的写入流的定义
    FileOutputStream fo = new FileOutputStream(fileOutput);

(5)写入文件(流的写入技术,就不多讲了)
    int c;
    while ((c = inputStream.read()) != -1)

{
    fo.write(c);

}
    //END

java blob的更多相关文章

  1. Java BLOB 数据的插入与读取 操作

    package com.lw.database; import java.io.FileInputStream; import java.io.FileOutputStream; import jav ...

  2. java blob 文件上传下载

    1.文件上传 pojo中为byte[] 类型,数据库中对应为blob类型. 主要代码: FileInputStream fis = null; fis = new FileInputStream(ne ...

  3. Java Blob类型和String类型相互转换

    1.String 转 Blob: String content = "Hello World!"; Blob blob = Hibernate.createBlob(content ...

  4. 7#Java基本语句语法

    Java基本语句语法https://github.com/DuGuQiuBai/Java/blob/master/day03/day03%E6%80%BB%E7%BB%93.txt 1:位运算符(了解 ...

  5. 3#Java案例

    以下内容引用Github地址https://github.com/DuGuQiuBai/Java/blob/master/day01/code/02_%E5%B8%A6%E6%B3%A8%E9%87% ...

  6. Java连载3-编译与运行阶段详解&JRE,JDK,JVM关系

    ·一. 1.JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html ...

  7. Java连载5-标识符、关键字和字面值

    一.标识符 1.标识符定义:在java源程序中凡是可以自己命名的单词 2.标识符可以标识什么元素? (1)类名(2)方法名(3)变量名(4)接口名(5)常量名 等等 3.标识符的命名要求 (1)一个合 ...

  8. Java连载6-变量的要求

    一.数据类型的作用 (1)不同的数据有不同的类型,不同的数据类型底层会分配不同的大小的空间 (2)数据类型是指程序在运行阶段应该分配多大的内存空间 二.变量要求 变量中存储的具体的“数据”必须和变量的 ...

  9. Java连载14-补码简介&浮点型整数

    一.补码简介 1.计算机中的符号数有三种表示方式,即为:原码.反码.补码.三种表示方法均有符号位和数值位,符号位都是0表示正数,符号位都是1表示负数. 2.计算机中的数字的存储方式:在计算机系统中,数 ...

随机推荐

  1. javascript快速入门11--正则表达式

    正则表达式可以: 测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 替换文本.可以在文档中使用一个正则表达式来标 ...

  2. 深度增强学习--Actor Critic

    Actor Critic value-based和policy-based的结合 实例代码 import sys import gym import pylab import numpy as np ...

  3. 查看进程id, 父进程id _How do I get the parent process ID of a given child process?

    How to get parent pid from a given children pid? I know I can mannully check it under /proc, I am wo ...

  4. JAVA利用HttpClient进行POST请求(HTTPS)

    目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用jQuery post进行请求. 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的p ...

  5. ssh中使用spring的集成quartz 编写定时任务

    之前没有使用框架开发时对于开发定时任务都是 使用java的原声timer类,重写线程的run方法跑要执行的任务.刚刚换的新公司,项目使用ssh2,目前该项目中的定时任务的使用spirng集成的quar ...

  6. POJ 2942 Knights of the Round Table 黑白着色+点双连通分量

    题目来源:POJ 2942 Knights of the Round Table 题意:统计多个个骑士不能參加随意一场会议 每场会议必须至少三个人 排成一个圈 而且相邻的人不能有矛盾 题目给出若干个条 ...

  7. python抓包截取http记录日志

    #!/usr/bin/python import pcap import dpkt import re   def main(): pc=pcap.pcap(name="eth1" ...

  8. JAVA的IO编程:管道流

    掌握线程通讯流(管道流)的使用 管道流的主要作用是可以进行两个线程间的通讯,分为管道输入流(PipeOutputStream)和管道输出流(PipeInputStream). 如果要想进行管道输出,则 ...

  9. java 学习帮助

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今 天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来 ...

  10. spring自己主动装配Bean属性

    spring提供了3种类型的自己主动装配 byName:把与Bean的属性具有同样名字(或者ID)的其它Bean自己主动装配到Bean的相应属性中. byType:把与Bean的属性具有同样类型的其它 ...