我们可以使用java从MySql数据库中获取添加的图像吗?
我已经在MySql数据库中添加了一个图像。我试图通过使用java创建一个新文件,从数据库中获取图像。问题是,一切正常,图像文件已经创建,但图像文件不包含图像,它什么都没有,新创建的图像文件的大小与原始文件不同。。。。。 Sql代码:
CREATE TABLE `pictures` ( `id` int(11) NOT NULL auto_increment, `description` varchar(20) default NULL, `photo` blob, PRIMARY KEY (`id`) );
insert into pictures values('1','pic1','D:\java.jpg');
java代码:
public class ReadBlobPicture
{
static String url = "jdbc:mysql://localhost:3306/imgdatabase";
static String username = "root";
static String password = "tiger";
public static void main(String[] args)
throws Exception
{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT photo FROM pictures where id=1";
Statement stmt = conn.prepareStatement(sql);
ResultSet resultSet = stmt.executeQuery(sql);
Object obj = resultSet;
while (resultSet.next())
{
File image = new File("E:\\java12.jpg");
FileOutputStream fos = new FileOutputStream(image);
System.out.println(resultSet.getString(1));
byte[] buffer = new byte[1];
InputStream is2 = resultSet.getBinaryStream(1);
System.out.println(is2.available());
while (is2.read() > 0)
{
fos.write(buffer);
fos.flush();
}
fos.close();
}
conn.close();
}
}
# 1 楼答案
# 2 楼答案
您在写入outputstream时遇到问题,应该是这样的:
你的照片应该以水滴的形式保存在数据库中
另外,你的缓冲区是无用的,因为它的大小是1,你应该使它至少为512或1024,以避免逐字节读取
希望有帮助
# 3 楼答案
不会将二进制jpg数据插入数据库,而是插入字符串
D:\java.jpg
# 4 楼答案
您从流中读取,但从未将读取的字符保存到缓冲区中
比如:
(编辑-来自对另一个答案的评论…)
有关不插入图像的insert语句,请参见this link