我想从结果集对象中检索blob元素,我想在一个窗口中逐个显示数据库中的所有图像。
下面的是我的数据库表。
| application_name | varchar(45) | | application_id | varchar(10) | | application_path | varchar(500) | | application_icon | blob |
下面是我的代码servlet代码,用于从数据库中检索图像
response.setContentType("image/jpeg");
try {
Connection connection= DBUtil.getConnection();
PreparedStatement preparedStatement=connection.prepareStatement("select application_icon from application_master where application_path='abc'");
ResultSet resultSet=preparedStatement.executeQuery();
int i=1;
//out.print("<h1>photo</h1>");
while (resultSet.next()) {
/*out.print("<img width='200' height='200' src="+resultSet.getBlob(1)+ "> </img>" );*/
Blob blob=resultSet.getBlob(i);
response.setContentLength((int) blob.length());
InputStream inputStream=blob.getBinaryStream();
OutputStream outputStream=response.getOutputStream();
byte buf[]=new byte[(int) blob.length()];
inputStream.read(buf);
outputStream.write(buf);
Thread.sleep(1000);
System.out.println("displayed");
i=i+1;
System.out.println(i);
}
上面的代码从第1行检索图像并显示图像。当我变为2即i = 2.它显示异常“java.sql.SQLException:列索引超出范围,2> 1。”。
我不明白当查询“从application_master中选择application_icon = application_path ='abc'”执行时,它会返回多个图像.........那么如何从结果集中检索所有图像对象
如果我不对,请纠正我..........
答案 0 :(得分:4)
您需要使用.getBlob(1)
,而不是.getBlob(i)
。对于resultSet
对象返回的每一行,BLOB数据始终位于第1列。