我正在编写一个Java代码来从Oracle数据库表中读取Blob对象。
我需要检索blob对象并将它们存储到String中以进行进一步处理。 我将blob对象内容转换为String:
java.sql.Blob blob = rs.getBlob(i);
columnValue = new String(blob.getBytes(1l, (int) blob.length()));
然而,当我尝试解析结果字符串时,我得到的错误是“不是有效的转义序列”,因为显然Blob数据包含一些数据,如 \ x,\ i 或其他什么!
有没有办法让 Java忽略这些转义序列,并让它只考虑字符串及其内容(即字符串包含\ x,\ i等)?
答案 0 :(得分:3)
我认为通过“解析”你指的是与正则表达式相关的东西,因为否则将这些值存储在字符串中就可以正常工作 - 转义序列仅对字符串文字和正则表达式有用。
无论如何,StringEscapeUtils.escapeJava(..)
应该做你想做的事(来自commons-lang)
除此之外 - 您应该使用java.sql.Clob
作为文本数据。
答案 1 :(得分:2)
该问题与“\ x”转义序列无关。 (这些转义序列只在字符串文字中有意义 - 它们与new String
没有没有。正则表达式中的转义序列只是对字符串的解释。)
问题是blob包含给定编码的无效的数据。来自new String(byte[])
文档:
未指定给定字节在默认字符集中无效时此构造函数的行为。当需要更多地控制解码过程时,应使用CharsetDecoder类。
另请注意,new String(byte[])
不应使用,因为(也来自文档):
使用平台的默认字符集解码指定的字节数组构造一个新的字符串。
因此我怀疑
快乐编码