Java 如果通过传递blob使用resultset.getString()会发生什么?

Java 如果通过传递blob使用resultset.getString()会发生什么?,java,mysql,Java,Mysql,我的表中有一个blob列,使用MySQL。我试图通过ResultSet的getString方法获得这个值,rs.getString(“xxxxxx”)我只是不确定在某些情况下是否会有问题。这是否取决于我在本专栏中存储的内容 有人能帮忙吗?数据库中存储的内容无关紧要。无论是字符串还是int,都可以从查询结果中获取数据,并将其解释为字符串。 字符串不是某个字节序列。它是对预期为字符串的对象的引用。这意味着引用指向内存中的某个结构,该结构主要是其他引用的结构。因此,当您获取一些字节序列并假设这是对对象

我的表中有一个blob列,使用MySQL。我试图通过ResultSet的getString方法获得这个值,
rs.getString(“xxxxxx”)
我只是不确定在某些情况下是否会有问题。这是否取决于我在本专栏中存储的内容


有人能帮忙吗?

数据库中存储的内容无关紧要。无论是字符串还是int,都可以从查询结果中获取数据,并将其解释为字符串。 字符串不是某个字节序列。它是对预期为字符串的对象的引用。这意味着引用指向内存中的某个结构,该结构主要是其他引用的结构。因此,当您获取一些字节序列并假设这是对对象的引用时,很可能会出现运行时异常。可能是ClassCastException,但谁知道您的数据是什么。因此,在这种情况下,即使是异常也是不可预测的


底线-不要这样做。

数据库中存储的内容无关紧要。无论是字符串还是int,都可以从查询结果中获取数据,并将其解释为字符串。 字符串不是某个字节序列。它是对预期为字符串的对象的引用。这意味着引用指向内存中的某个结构,该结构主要是其他引用的结构。因此,当您获取一些字节序列并假设这是对对象的引用时,很可能会出现运行时异常。可能是ClassCastException,但谁知道您的数据是什么。因此,在这种情况下,即使是异常也是不可预测的


底线-不要这样做。

没有任何限制,您可以使用
rs.getString(“xxxxxx”)
,根据
getString
的实现,您将得到一个字符串,该字符串将以
字节
数组的形式包含
blob
数据

    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”)的实现


.

没有限制,您可以使用
rs.getString(“xxxxxx”)
,根据
getString
的实现,您将得到一个字符串,该字符串将以
字节
数组的形式包含
blob
数据

    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”)的实现


.

您不会得到空值。您可能会得到一个
ClassCastException
@EJP请检查更新后的答案,我已经添加了
getString()
的实现,您可以看到
getObject
在开始时被调用,列的类型被检查,相应的值被设置为
String
的形式,您不会得到null。您可能会得到一个
ClassCastException
@EJP请检查更新的答案,我已经添加了
getString()
的实现,正如您所看到的,在开始时调用了
getObject
,并检查了列的类型,相应地,以
String
@Alex的形式设置了值。请检查刚刚在我的回答中发布的
getString
的实现,我不认为会有
ClassCastException
根据implementation@Vishrant-如果getObject()从数据库中为您的返回正确的对象类型,那么您就没事了。然而,我不确定常规的db驱动程序是否能做到这一点。事实上,通常我们会通过说getString(),getInt(),getFloat()@Alex来告诉驱动程序应该得到什么。请检查刚刚在我的回答中发布的
getString
的实现,根据我的回答,我不认为会有
ClassCastException
implementation@Vishrant-如果getObject()从数据库中返回正确的对象类型,则一切正常。然而,我不确定常规的db驱动程序是否能做到这一点。实际上,通常我们通过说getString(),getInt(),getFloat()来告诉驱动程序要得到什么