[英]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.