简体   繁体   English

如何将byte []保存为java.sql.Clob?

[英]How to save a byte[] as java.sql.Clob?

I have a file that I get as a byte[] and I have to persist it in my entity as Clob. 我有一个以byte[]获取的文件,并且必须将其作为Clob持久保存在我的实体中。

How to save a byte[] as java.sql.Clob ? 如何将byte[]保存为java.sql.Clob

To get a Clob from byte[] on Oracle, you can do 要从Oracle上的byte[]获取Clob ,您可以执行

private Clob createClob(byte[] data, Connection conn) {
    CLOB clob = null; 

    try { 
        clob = CLOB.createTemporary(conn, false, oracle.sql.CLOB.DURATION_SESSION);

        clob.open(CLOB.MODE_READWRITE);

        OutputStream out = (OutputStream) clob.setAsciiStream(0L);

        out.write(data);
        out.flush();
        out.close();
    }
    catch (Exception e) {
        logger.error("", e);
    }
    finally {
        try {
            if (clob != null && clob.isOpen()) clob.close();
        }
        catch (SQLException e) {
            logger.error("Unable to close CLOB", e);
        }
    }

    return clob;
}

To create a Blob (binary) is almost the same, just replacing clob by blob and OutputStream out = (OutputStream) blob.setBinaryStream(0L); 以创建BLOB(二进制)几乎是相同的,通过blob和刚更换CLOB OutputStream out = (OutputStream) blob.setBinaryStream(0L);

With Apache commons-io 使用Apache commons-io

byte[] data = IOUtils.toByteArray(clob.getAsciiStream());

if you need special encoding or you have some issue try: 如果您需要特殊编码或遇到问题,请尝试:

byte[] data = IOUtils.toByteArray(clob.getCharacterStream(), "UTF-8");

javax.sql.rowset.serial.SerialClob can accept array of char and create a serializable Clob object. javax.sql.rowset.serial.SerialClob可以接受char数组并创建可序列化的Clob对象。

You can refer here http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialClob.html 您可以在这里参考http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialClob.html

javax.sql.rowset.serial.SerialBlob can accept array of bytes javax.sql.rowset.serial.SerialBlob可以接受字节数组

You can refer here http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialBlob.html 您可以在这里参考http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialBlob.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM