我的表中有一个使用MySQL的blob列。我试图通过ResultSet的getString方法获取此值,rs.getString("xxxxxx")
我不确定在某些情况下是否会出现问题。剂量取决于我在本专栏中存储的内容?
任何人都可以帮忙吗?
答案 0 :(得分:0)
存储在数据库中的内容并不重要。它不是String或int并不重要。您从查询结果中获取数据,并将其解释为String。 字符串不是某些字节序列。它是对期望为String的Object的引用。这意味着内存中某些结构的参考点主要是其他参考文献的结构。因此,当你采用一些字节序列并假设这是对Object的引用时,很可能会有运行时异常。可能是ClassCastException,但谁知道你的数据有什么。因此,即使例外情况在这种情况下也是不可预测的。
底线 - 不要这样做。
答案 1 :(得分:-1)
没有限制,您可以使用rs.getString("xxxxxx")
,根据getString
的实现,您将获得一个包含blob
数据的字符串,其格式为byte
} array
if ((localObject1 instanceof OracleSerialBlob)) {
localObject2 = (OracleSerialBlob) localObject1;
return new String(((OracleSerialBlob) localObject2).getBytes(0L, (int) ((OracleSerialBlob) localObject2).length()));
}
如上所述,如果条件调用低于String
构造函数:
public String(byte bytes[]) {
this(bytes, 0, bytes.length);
}
以下是getString("xxxx");
public String getString(int paramInt) throws SQLException {
Object localObject1 = getObject(paramInt);
if (localObject1 == null) {
return (String) localObject1;
}
if ((localObject1 instanceof String)) {
return (String) localObject1;
}
if (((localObject1 instanceof Number)) || ((localObject1 instanceof BigDecimal))) {
return localObject1.toString();
}
if ((localObject1 instanceof java.sql.Date)) {
return ((java.sql.Date) localObject1).toString();
}
if ((localObject1 instanceof Timestamp)) {
return ((java.sql.Date) localObject1).toString();
}
if ((localObject1 instanceof byte[]))
return new String((byte[]) localObject1);
Object localObject2;
if ((localObject1 instanceof OracleSerialClob)) {
localObject2 = (OracleSerialClob) localObject1;
return ((OracleSerialClob) localObject2).getSubString(0L, (int) ((OracleSerialClob) localObject2).length());
}
if ((localObject1 instanceof OracleSerialBlob)) {
localObject2 = (OracleSerialBlob) localObject1;
return new String(((OracleSerialBlob) localObject2).getBytes(0L, (int) ((OracleSerialBlob) localObject2).length()));
}
if ((localObject1 instanceof URL)) {
return ((URL) localObject1).toString();
}
if ((localObject1 instanceof Reader)) {
try {
localObject2 = (Reader) localObject1;
char[] arrayOfChar = new char[1024];
int i = 0;
StringBuffer localStringBuffer = new StringBuffer(1024);
while ((i = ((Reader) localObject2).read(arrayOfChar)) > 0)
localStringBuffer.append(arrayOfChar, 0, i);
return localStringBuffer.substring(0, localStringBuffer.length());
} catch (IOException localIOException) {
throw new SQLException("Error during conversion: " + localIOException.getMessage());
}
}
throw new SQLException("Fail to convert to internal representation");
}