用Java从MySQL读取blob
我在用Java从MySQL数据库读取blob时遇到问题。 我需要用jax-rs编写一个webservice来提供保存在数据库中的图像。对于传输,必须使用Base64对其进行编码 这是我的代码:用Java从MySQL读取blob,java,mysql,blob,Java,Mysql,Blob,我在用Java从MySQL数据库读取blob时遇到问题。 我需要用jax-rs编写一个webservice来提供保存在数据库中的图像。对于传输,必须使用Base64对其进行编码 这是我的代码: public String getImage(@PathParam("id") int id) throws SQLException{ System.out.println(id); String img64str = "null"; Blob image = null;
public String getImage(@PathParam("id") int id) throws SQLException{
System.out.println(id);
String img64str = "null";
Blob image = null;
Connection conn = MySQLConnection.getInstance();
if(conn != null)
{
try{
// Anfrage-Statement erzeugen.
Statement query;
query = conn.createStatement();
// Ergebnistabelle erzeugen und abholen.
String sql = "SELECT bild FROM beitraege where id="+id;
ResultSet result = query.executeQuery(sql);
//Ergebniss zur�ckliefern
while (result.next()) {
System.out.println("while");
image = result.getBlob("bild");
InputStream binaryStream = image.getBinaryStream(1, image.length());
String str= binaryStream.toString();
byte[] bdata=str.getBytes();
byte[] img64 = Base64.encode(bdata);
img64str = new String(img64);
}
}catch (SQLException e) {
e.printStackTrace();
}
}
return img64str;
}
不知何故,它只返回如下解码结果列表:
java.io.ByteArrayInputStream@cc90a0a
您将返回binaryStream.toString的结果,类似于java.io。ByteArrayInputStream@cc90a0a.
您必须使用InputStream上的read方法来获取实际内容。您将返回binaryStream.toString的结果,类似于java.io。ByteArrayInputStream@cc90a0a. 您必须使用InputStream上的read方法来获取实际内容。java.io。ByteArrayInputStream@cc90a0a是在InputStream上调用toString的结果。它实际上并没有将其转换为字符串-它只是使用默认的toString行为,即在当前环境中返回对象的标识符 InputStream接口上定义了几种读取方法,用于获取流所表示的基本字节序列。您需要使用其中一个来提取内容,而不是试图通过toString将其转换为字符串。java.io。ByteArrayInputStream@cc90a0a是在InputStream上调用toString的结果。它实际上并没有将其转换为字符串-它只是使用默认的toString行为,即在当前环境中返回对象的标识符 InputStream接口上定义了几种读取方法,用于获取流所表示的基本字节序列。您需要使用其中一个来提取内容,而不是试图通过toString将其转换为字符串。这一行是错误的:
binaryStream.toString();
InputStream不重写toString,因此使用Object.toString,其定义如下。这就解释了为什么你会得到这个字符串
演示如何将InputStream正确转换为字符串
这意味着您不应该将二进制数据(如Base64编码图像)转换为字符串。请参见下面的NullUserException注释。这行是错误的:
binaryStream.toString();
InputStream不重写toString,因此使用Object.toString,其定义如下。这就解释了为什么你会得到这个字符串
演示如何将InputStream正确转换为字符串
这意味着您不应该将二进制数据(如Base64编码图像)转换为字符串。请参见下面的NullUserException注释。问题在于toString调用:binaryStream.toString;BinaryInputStream不实现toString。 使用类似以下内容读取字节:
int ch;
//read bytes from ByteArrayInputStream using read method
while((ch = binaryStream.read()) != -1)
{
System.out.print((char)ch);
// store it to an array...
}
问题在于toString调用:binaryStream.toString;BinaryInputStream不实现toString。 使用类似以下内容读取字节:
int ch;
//read bytes from ByteArrayInputStream using read method
while((ch = binaryStream.read()) != -1)
{
System.out.print((char)ch);
// store it to an array...
}
这是调用binaryStream.toString的结果。提示:在处理二进制数据时,避免完全使用字符串。这是调用binaryStream.toString的结果。提示:在处理二进制数据时,避免完全使用字符串。-1用于建议将InputStream转换为字符串。如果InputStream实际上不包含文本数据,这是一个糟糕的想法。@NullUserException胡说八道。我不推荐,这是OP想要/要求的。字符串getImage。嗯,它是错误的。这将损坏二进制数据。您应该教育OP以正确的方式进行操作,而不是误导他们进入错误的路径。-1建议将InputStream转换为字符串。如果InputStream实际上不包含文本数据,这是一个糟糕的想法。@NullUserException胡说八道。我不推荐,这是OP想要/要求的。字符串getImage。嗯,它是错误的。这将损坏二进制数据。你应该教育OP以正确的方式做事,而不是误导他们走上错误的道路。@FredM你能给出完整的答案吗here@FredM你能把完整的答案贴在这里吗