Java 如何从MySQL读取长blob

Java 如何从MySQL读取长blob,java,mysql,groovy,casting,blob,Java,Mysql,Groovy,Casting,Blob,我有一个pdf作为一个长blob存储在数据库中 我需要用Groovy脚本检索它的二进制输出流 我试过这个: rowTest = sql.firstRow("select data from mytable id = 666"); file = rowTest[0]; myLongBlob = (oracle.sql.BLOB)file; 但是,我得到一个强制转换异常: javax.script.ScriptException: javax.script.ScriptException: org

我有一个pdf作为一个长blob存储在数据库中

我需要用Groovy脚本检索它的二进制输出流

我试过这个:

rowTest = sql.firstRow("select data from mytable id = 666");
file = rowTest[0];
myLongBlob = (oracle.sql.BLOB)file;
但是,我得到一个强制转换异常:

javax.script.ScriptException: javax.script.ScriptException: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[B@48eb2326' with class '[B' to class 'oracle.sql.BLOB'
然后我意识到我试图将一个长的BLOB转换为一个BLOB,这可能就是发生此错误的原因

不管怎样,有没有其他方法可以从长博客中阅读我的PDF

谢谢

编辑:该错误不是由于将LONGBLOB转换为BLOB造成的,我尝试了一个BLOB,但同样的错误也发生了


编辑:我试着按照这个教程:

一个对象
'[B@48eb2326“
引用一个字节数组;
行测试[0]
处的对象是一个
字节[]
,而不是
Blob
。因此最简单的事情可能是
字节[]myLongBlob=(字节[])文件
(无论如何,这对您来说可能更方便!)

对象
'[B@48eb2326“
引用一个字节数组;
行测试[0]
处的对象是一个
字节[]
,而不是
Blob
。因此最简单的事情可能是
字节[]myLongBlob=(字节[])文件
(无论如何,这对您来说可能更方便!)。

是的,但我参考了本教程:它们似乎直接将行测试[0]强制转换为BLOB我的目标是获得一个BLOB对象,这样我就可以使用getBinaryOutputStream()方法。它可能特定于JDBC驱动程序。本教程假设一个Oracle数据库;您使用的是MySQL、Postgres还是其他数据库?这很可能是不同之处。无论如何,我相信您的JVM胜过在线文档。:)对象是一个
byte[]
,不管教程说它应该是什么。你需要它作为
Blob
对象吗?我使用的是MySQL。我试图从存储为LONGBLOB的数据库中读取PDF,所以我试图使用oracle.sql.Blob.getBinaryStream()将其转换为Blob以获得二进制流因此,我可以将其二进制数据传递给web应用程序,并看到PDF online.MySQL将其作为
字节[]返回
似乎是这样。如果您需要它作为
输入流
,您可以用
ByteArrayInputStream
将其包装起来。这似乎是个好主意,应该不难转换回PDF。谢谢,但我参考了本教程:它们似乎直接转换为rowTest[0]对于BLOB,我的目标是获得一个BLOB对象,以便使用getBinaryOutputStream()方法。它可能特定于JDBC驱动程序。本教程假设使用Oracle数据库;您是否使用MySQL、Postgres或其他数据库?这很可能是不同之处。无论如何,我相信您的JVM而不是在线文档。:)该对象是一个
byte[]
,不管教程怎么说它都应该是。你需要它作为
Blob
对象吗?我使用的是MySQL。我试图从存储为LONGBLOB的数据库中读取PDF,所以我试图使用oracle.sql.Blob.getBinaryStream()将其转换为Blob以获得二进制流因此,我可以将其二进制数据传递到web应用程序,并在线查看PDF。MySQL将以
字节[]
的形式返回它。如果您需要将其作为
输入流
,您可以将其封装在
ByteArrayInputStream
中。这似乎是一个好主意,应该不难转换回PDF。谢谢