首页 java数据 java对Blob读写(记录)

java对Blob读写(记录)

未遇到问题,先记录,防止以后找不到资源 package com.you.sister; import java.io.B…

未遇到问题,先记录,防止以后找不到资源

package com.you.sister;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

public class BlobTest {

    public static Connection conn;

    public static Connection getConn() throws Exception {
        FileInputStream fis = new FileInputStream(new File("jdbc.properties"));
        Properties prop = new Properties();
        prop.load(fis);
        String driver = prop.getProperty("jdbc.driver");
        String url = prop.getProperty("jdbc.url");
        String username = prop.getProperty("jdbc.username");
        String password = prop.getProperty("jdbc.password");
        Class.forName(driver);
        return  DriverManager.getConnection(url, username, password);
    }

    public static void main(String[] args) throws Exception {
        conn = getConn();
        readBlob();
        writeBlob();
        conn.close();
    }

    /**
     * 从数据库中读大对象出来
     * 保存在本地
     */
    public static void readBlob() {
        try {
            String readSql = "select * from emp where empno = ?";
            PreparedStatement ps = conn.prepareStatement(readSql);
            ps.setInt(1, 7369);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Blob image = rs.getBlob("image");
                DataOutputStream dos =
                    // 在FileOutputStream中指定文件输出路径
                    new DataOutputStream(new FileOutputStream(7369 + "_image.jpeg"));
                InputStream fis = image.getBinaryStream();
                int out;
                byte[] outByte = new byte [100];
                // 将blob对象输入流写入本地输出流中
                while ((out = fis.read(outByte)) != -1) {
                    dos.write(outByte);
                }
                fis.close();
                dos.flush();
                dos.close();
            }
            rs.close();
            ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 将大对象文件保存进数据库中
     */
    public static void writeBlob() {
        try {
            BufferedInputStream fis =
                new BufferedInputStream(new FileInputStream(new File("D:\\Tulips.jpg")));
            // 如果是新插入字段,则将大对象对应字段插入为empty_clob();
            // 如果是修改,则可以先update 该行数据,将大对象对应字段设置为empty_clob();
            String writeSql = "select * from emp where empno = ? for update";
            PreparedStatement ps = conn.prepareStatement(writeSql);
            ps.setInt(1, 7499);
            conn.setAutoCommit(false);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                oracle.sql.BLOB image = (oracle.sql.BLOB)rs.getBlob("image");
                BufferedOutputStream bos = new BufferedOutputStream(image.getBinaryOutputStream());
                int c;
                // 将实际文件中的内容以二进制的形式来输出到blob对象对应的输出流中
                while ((c = fis.read()) != -1) {
                    bos.write(c);
                }
                fis.close();
                bos.close();
            }
            conn.commit();
            rs.close();
            ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

从数据库中读blob对象出来相对比较容易

从本地向数据库写blob对象相对难一些,主要注意两点:

1  要处理的blob字段必须先设置为empt_clob()

2  使用事务控制向数据库的写入操作

 

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

mysql  优化提升

mysql 优化提升

desc  分别使用DESCRIBE和DESC查看表tb dept1和表tb emp1的表结构。 查看表详细结构语句SH...
navicat 能打开root链接不知道密码直接修改mysql 密码

navicat 能打开root链接不知道密码直接修改mysql 密码

找到系统自带 mysql 数据库   update user set password= password(&...
Cannot access aliyunmaven ( xxx ) in offline mode and the artifact

Cannot access aliyunmaven ( xxx ) in offline mode and the artifact

Cannot access aliyunmaven ( xxx ) in offline mode and the ar...
mysql 基础入门

mysql 基础入门

第一章 SQL的介绍 1.1什么是sql SQL:Structure Query Language。(结构化查询语言),...
You can’t specify target table ‘caiji_data_meiwen’ for update in FROM clause

You can’t specify target table ‘caiji_data_meiwen’ for update in FROM clause

  mysql 中不能自己 引用本身 要再加一层 不行 DELETE from `caiji_data_mei...
返回顶部