Bolb存储照片

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.*;   

public class BlobTest {
    public static void main(String args[]){
        Connection conn = null;
        Statement stmt = null;
        PreparedStatement ps = null;
        ResultSet rs = null;   

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //获取数据库对象
            conn =  DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","用户名","密码");
            conn.setAutoCommit(false);  

            //表存在则删除它
            String sql = "DROP TABLE IF EXISTS blobtest";//MySql

            sql = "declare num number; begin"+
            " select count(1) into num from user_tables where table_name = upper(‘blobtest‘);"+
            " if num > 0 then execute immediate ‘drop table blobtest‘ ; end if;"+
            " end;";//Orcl

            stmt = conn.createStatement();
            System.out.println(sql);
            stmt.executeUpdate(sql);
            //创建表
            sql = "CREATE TABLE blobtest(" +
            "b_id INT NOT NULL ,"+
            "b_title VARCHAR(50),"+
            "b_text Blob"  +
            ")";   

            System.out.println(sql);
            stmt.executeUpdate(sql);
            System.out.println("创建数据表成功!");   

            sql="INSERT INTO blobtest(B_ID,b_title,b_text)VALUES(?,?,?)";
            ps = conn.prepareStatement(sql);
            //插入图片
            File file = new File("d://1.JPG");
            InputStream inputStream = new FileInputStream(file);

            //以前的时候直接使用setBinaryStream就可以保存图片,但
            //数据库的字符集换成 gbk后就不能用了,一直提示参数类型不匹配,在网上查了一下,
            //直接向数据库中存byte可解决
            //ps.setString(1, file.getName());
            //ps.setBinaryStream(2,inputStream,file.length());
            //ps.executeUpdate();
            try {
                ps.setString(1, "1");
                ps.setString(2, file.getName());
                //新建一byte数组
                byte[] buf=new byte[inputStream.available()];
                //将文件读入到byte[]中
                inputStream.read(buf);
                ps.setBytes(3, buf);
                ps.executeUpdate();
                System.out.println("插入成功!");
            } catch (IOException e1) {
                System.out.println("保存图片到数据库成功!");
                e1.printStackTrace();
            }
            conn.commit();  

            //读取数据
            sql = "SELECT b_title,b_text FROM blobtest";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                System.out.println("图片名: "+rs.getString("b_title"));
                Blob blob = rs.getBlob("b_text");
                File file2 = new File("d://2.jpg");
                OutputStream outputStream = new FileOutputStream(file2);
                try {
                    outputStream.write(blob.getBytes(1,(int)blob.length()));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //打印出来的为对象
                System.out.println("图片内容: "+ blob.getBinaryStream());   

            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{   

            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }   

    }   

} 

第二种:

import java.sql.*;
import oracle.sql.*;
import java.io.*;  

import oracle.jdbc.driver.OracleResultSet;  

public class WriteBlob {
    public static void main(String[] args) {
        try {
            // 连接数据库
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","用户名","密码");
            conn.setAutoCommit(false);  

            //获取源照片数据
            BLOB blob = null;
            String fileName = "d://wenpaiyi//1.JPG";
            File f = new File(fileName);  

            //先插入一条记录,用于后面获得一个Blob对象
            PreparedStatement pstmt = conn.prepareStatement("insert into blobtest(b_id,b_text) values(?,empty_blob())");
            pstmt.setString(1,"1");
            pstmt.executeUpdate();
            pstmt.close();  

            // 获得Blob对象(由于Blob是接口,不能实例化,所以只好用这种曲折方法获得)
            pstmt = conn.prepareStatement("SELECT b_text FROM blobtest WHERE trim(b_id)=? ");
            pstmt.setString(1,"1");
            ResultSet rset = pstmt.executeQuery();
            if (rset.next()){
                blob = (BLOB)rset.getBlob(1);
            }
            pstmt.close();
            if (blob == null){
                System.out.println("blob is null");
                conn.close();
                return ;
            }  

            // 填充Blob值,用于提交到数据库
            FileInputStream fin = new FileInputStream(f);
            System.out.println("file size = " + fin.available());
            OutputStream out = blob.getBinaryOutputStream();
            byte[] data = new byte[(int)fin.available()];
            // 获取
            fin.read(data);
            out.write(data);
            // 关闭资源
            fin.close();
            out.close(); 

            // 插入数据库
            pstmt = conn.prepareStatement("update blobtest set b_text=? where b_id=?");
            pstmt.setBlob(1,blob);
            pstmt.setString(2,"1");
            pstmt.executeUpdate();
            pstmt.close();
            // 提交
            conn.commit(); 

            //---------------------------------------------------读取-------------------------------------
            String readSql = "SELECT b_text FROM blobtest WHERE trim(b_id)=? ";
            PreparedStatement ps = conn.prepareStatement(readSql);
            ps.setString(1, "1");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Blob image = rs.getBlob("b_text");
                DataOutputStream dos =
                    // 在FileOutputStream中指定文件输出路径
                    new DataOutputStream(new FileOutputStream(new File("d://wenpaiyi//2.JPG")));
                InputStream fis = image.getBinaryStream();
                int out1;
                byte[] outByte = new byte [100];
                // 将blob对象输入流写入本地输出流中
                while ((out1 = fis.read(outByte)) != -1) {
                    dos.write(outByte);
                }
                fis.close();
                dos.flush();
                dos.close();
            }
            rs.close();
            ps.close();  

            //---------------------------------------------------读取-------------------------------------
            pstmt = conn.prepareStatement("SELECT b_text FROM blobtest WHERE trim(b_id)=? ");
            pstmt.setString(1,"1");
            rset = pstmt.executeQuery();
            if (rset.next()){
                blob = (BLOB)((OracleResultSet)rset).getBLOB(1);
            }
            pstmt.close();
            if (blob == null){
                System.out.println("blob2 is null");
                conn.close();
                return ;
            }
            // 输出到磁盘
            // 获得
            FileOutputStream fout = new FileOutputStream(new File("d://wenpaiyi//3.JPG"));
            InputStream in = blob.getBinaryStream();  //asciiStreamValue()

            int out2 ;
            byte [] outbyte = new byte [100];

            while((out2 = in.read(outbyte)) != -1){
                fout.write(outbyte);
            }
            in.close();
            fout.flush();
            fout.close();

            conn.close();
            // 打开
            //Process pro = Runtime.getRuntime().exec("cmd /c start D:\\2.jpg");
        }catch   (SQLException   e)   {
            System.err.println(e.getMessage());
            e.printStackTrace();
        }catch(IOException   e)   {
            System.err.println(e.getMessage());
        }catch(ClassNotFoundException   e){
            e.printStackTrace();
        }
    }
}
时间: 2024-08-29 07:44:43

Bolb存储照片的相关文章

c#实现SQLServer存储照片,并读取照片

小程序:c#实现SQLServer存储照片,并读取照片 建立数据库:: 建一张表:, 新建存储过程:create procedure sp_InsertPhoto2 @name AS VARCHAR(50), @image AS IMAGE AS INSERT INTO photps(name,photo) VALUES(@name,@image) RETURN @@identity GO 程序在附件中.

mybaties获取mysql存储的bolb字段 和展示

bolb在mysql中这样显示: 看着就头疼~ 查询时候 后台转换一下 前台展示: 编辑时候:后台获取这个bolb时候转译一下  然后在堆他做一下处理:URLEncoder.encode去解码  编辑: 展示: ok 原文地址:https://www.cnblogs.com/aijiajia1314/p/9829084.html

Bolb

Bolb对象表示一个不可变.原始数据的类文件对象.Blob 表示的不一定是JavaScript原生格式的数据. MYSQL中的BLOB类型就只是个二进制数据容器.而HTML5中的Blob对象除了存放二进制数据外还可以设置这个数据的MINE类型,这相当于对文件的储存,其它很多二进制对象也是从这个对象继承的. File接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件. Blob()构造函数返回一个新的Blob对象. blob的内容由参数数组中给出的值的串联组成. var

BOLB转word文件,和word文件转换BOLB

1.BOLB转word文件 import java.io.*; import java.sql.*; public class Test { Connection con = null; Statement stmt = null; ResultSet rs = null; private ResultSet getResultSet() { try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); St

CLOB/BOLB与String互转

原文地址http://www.oschina.net/code/snippet_135225_5485#8747,仅仅第十一行代码,便可将BLOB类型转化为String类型,简单粗暴,我喜欢 1 String s1="1231dsdgasd的飒飒大"; 2 3 Clob c = new SerialClob(s1.toCharArray());//String 转 clob 4 Blob b = new SerialBlob(s1.getBytes("GBK"));

如何使用Ubuntu手机平台中的照相机API来存储照片

在前面的一篇文章中"如何在Ubuntu手机中使用前置照相机",我们可以使用相应的C++代码来控制前后位置的照相机来拍照,但是我们又如何能够把所拍到的照片存储到相应的文件中呢?我们可以使用Qt 5.4版本中的Item所提供的一个新的功能"grabToImage".这样我们可以很方便地把我们得到的照片存到我们相应的目录中. 在Ubuntu手机平台中,由于安全的原因,我们的应用只可以访问自己所在的可以访问的目录.在这个例程中,我们使用了一些环境的变量来得到我们所需要的存储

myasql支持的数据类型以及函数转换

myasql支持的数据类型 1.数值类型 tinyint 1 小整数 smallint 2 大整数 mediumint 3 大整数 int 4 大整数 bigint 8 极大整数 如果插入 的较大较小 会自动改编为范围值 多余的数截取 float 4 double 8 decimal 默认是10 可以指定多少个整数和小数 2.字符串类型 char 0-255字节 定长字符串 varchar 0-255字节 变长字符串 tinyblob 0-255字节 不超过255个字符的二进制字符 tintex

java实体属性对应mysql和SQL Server 和Oracle 数据类型对应

1:Java数据类型与MySql数据类型对照表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 T

(一)sql入门

从转行做软件始,就开始接触sql,但还是不怎么深入,回忆3月份找工作的时候,左关联都没有写出来,真是丢脸,以此博客做个认真的开始. 以后的日子,遇到了圆柱体的空心物体,我就应该联想到一样东西,那就是数据库.数据库这个东西就是放数据的仓库.那么什么又是数据呢?数据就是人们对客观事物的描述,就可是数据.如树有高度,有多少片树叶,有绿色等等,这些就算是数据. 计算机时代的到来,让人们不再将数据存放在诸如纸质的资料里,而是存放在存储器里面.如何快速的存取我们得数据呢?人们就设计了一个管理系统,来管理数据