java读取blob,clob转换为字符串

直接上代码:

package com.it.test;

import java.io.BufferedReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.sql.BLOB;

public class Test {

    /***
     * 读取oracleCLOB字段内容
     *
     * @param conn
     * @return
     */
    public static String readCLOB(Connection conn) {
        String sql = "select 大字段1,大字段2 from 印章基本信息_char_ccbb where yzbm=‘2‘";
        String content = "";
        try {
            conn.setAutoCommit(false);
            PreparedStatement ps1 = conn.prepareStatement(sql);
            ResultSet rs1 = ps1.executeQuery();
            while (rs1.next()) {
                oracle.sql.CLOB clob = (oracle.sql.CLOB) rs1.getClob("大字段1");

                BufferedReader in = new BufferedReader(clob.getCharacterStream());
                StringWriter out = new StringWriter();
                int c;
                while ((c = in.read()) != -1) {
                    out.write(c);
                }
                content = out.toString();
                System.out.println(content);// 输出CLOB内容
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }

    /***
     * 读取oracle的blob转换为字符串
     *
     * @param conn
     * @return
     */
    public static String ConvertBLOBtoString(Connection conn) {
        String newStr = ""; // 返回字符串
        long BlobLength; // BLOB字段长度
        byte[] bytes; // BLOB临时存储字节数组
        int i = 1; // 循环变量
        Statement st = null;
        try {
            st = conn.createStatement();
            ResultSet rs = st.executeQuery("select 大字段2 from 印章基本信息_char_ccbb where yzbm=‘2‘");
            while (rs.next()) {
                BLOB blob = (BLOB) rs.getBlob("大字段2");
                byte[] msgContent = blob.getBytes(); // BLOB转换为字节数组
                BlobLength = blob.length(); // 获取BLOB长度
                if (msgContent == null || BlobLength == 0) // 如果为空,返回空值
                {
                    return "";
                } else {
                    while (i < BlobLength) // 循环处理字符串转换,每次1024;Oracle字符串限制最大4k
                    {
                        bytes = blob.getBytes(i, 1024);
                        i = i + 1024;
                        newStr = newStr + new String(bytes, "gb2312");
                    }
                }
            }
            System.out.println(newStr);
            System.out.println(newStr.length());

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return newStr;
    }
}

以上内容参考自:https://blog.csdn.net/u010965170/article/details/78729794

原文地址:https://www.cnblogs.com/licheng0201/p/9974830.html

时间: 2024-11-10 16:21:43

java读取blob,clob转换为字符串的相关文章

java读取blob全身乱码

一.BLOB操作 1.入库 (1)JDBC方式 //通过JDBC获得数据库连接 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test"); con.setAutoCommit(fa

Java读取文件,将字符串转化成日期类型,将日期类型进行加减

最近总用Java读取文件,发现了一种我个人觉得比较好的方法,现在分享给大家 public static void main(String[] args) throws Exception { FileInputStream f = new FileInputStream("文件路径"); InputStreamReader fileInputStream = new InputStreamReader(f); BufferedReader br = new BufferedReader

Java 读取输入字符和字符串

1. 使用Scanner读取字符和字符串 3 /** 4 * Created by SheepCore on 2020-2-26 5 */ 7 public class Main { 8 public static void main(String[] args) { 9 Scanner scan = new Scanner(System.in); //声明一个Scanner对象,初始输入流为控制台 10 String name = scan.nextLine(); //读取键盘输入字符串(包括

java 读取文件转换成字符串

public String readFromFile(File src) {        try {            BufferedReader bufferedReader = new BufferedReader(new FileReader(                    src));            StringBuilder stringBuilder = new StringBuilder();            String content;      

MyBatis 杂项(分页,缓存,处理BLOB\CLOB数据)

1.处理CLOB,BLOB数据 oracle中的 clob:clob blob:blobmysql中的 clob:longtext blob:longblob 2.传入多个输入参数,mybatis自带的param属性(但是不经常用,我们用map就足够了) 3.MyBatis分页 逻辑分页:将数据全部取出先放到内存中,之后在内存中进行分页,性能不好.不推荐使用 物理分页:通过语句进行分页. 4.MyBatis缓存 MyBatis默认情况下:MyBatis默认使用一级缓存,即同一个SqlSessio

java操作oracle的blob,clob数据

一.区别和定义 LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 LONG RAW: 可变长二进制数据,最长2G CLOB:  字符大对象Clob 用来存储单字节的字符数据 NCLOB: 用来存储多字节的字符数据 BLOB: 用于存储二进制数据 BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访.但该文件不包含在数据库内. bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对o

Java读取/更新Oracle数据库blob字段

在写java程序过程中,如何读取Oracle数据库表某类型为blob的字段? 以下是我在写程序的时候一种解决方法.核心语句.(传上来做了修改,格式不要学习,养成良好习惯) 详细请参考: 读取序列ID:http://blog.csdn.net/yzsind/article/details/6918506 BLOB相关:http://jslfl.iteye.com/blog/1771949 http://www.linuxidc.com/Linux/2011-08/40218.htm http://

Java 对Oracle Clob(大字符串)格式的操作 增改查

package com.study.db; import java.io.FileInputStream; import java.io.IOException;import java.io.Reader;import java.io.Writer;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import j

JAVA将整数表示的ip地址转换为字符串表示

/** * 将整数表示的ip地址转换为字符串表示. * * @param ip 32位整数表示的ip地址 * @return 点分式表示的ip地址 */ public static final String long2Ip(final long ip) { final long[] mask = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 }; final StringBuilder ipAddress = new StringBuilder