Java ResultSet.next()未迭代
我的代码:Java ResultSet.next()未迭代,java,sql,iteration,resultset,Java,Sql,Iteration,Resultset,我的代码: public class DisplayImage extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String connectionURL = "jdbc:mysql://localhost:3306/ycards";
public class DisplayImage extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String connectionURL = "jdbc:mysql://localhost:3306/ycards";
java.sql.Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(connectionURL, "root", "letmein");
PreparedStatement st1 = con.prepareStatement("select image from pictures");
ResultSet rs1 = st1.executeQuery();
String imgLen = "";
while (rs1.next()) {
imgLen = rs1.getString(1);
int len = imgLen.length();
byte[] rb = new byte[len];
InputStream readImg = rs1.getBinaryStream(1);
readImg.read(rb, 0, len);
response.setContentType("image/png");
response.getOutputStream().write(rb, 0, len);
response.getOutputStream().flush();
}
st1.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
它只显示第一行,不显示其余的,为什么这样做?注意:在本例中,密码和用户名不是真实的。您在
结果集上迭代作为next()
将光标从当前位置向前移动一行,并在读取最后一个位置时返回false
。
问题在于每次迭代时都会刷新httpResponse.outputstream
。
并在PrintWriter
上调用flush()
,提交HTTP响应。
因此,在第一次迭代之后,您无法写入任何内容。
我不认为您可以使用图像内容类型发送多张图像:
response.setContentType("image/png");
如果您想使用此内容类型,也可以创建一个结合了所有内容类型的大图像。
但这真的有意义吗?
我怀疑您不需要使用:
response.setContentType("image/png");
但是,您应该使用首先生成的图像URL在客户端页面中显示图像。
然后,您可以使用JSTL或scriplet对url图像进行迭代,将它们呈现为HTMLimg
元素。不要放置代码图片。我们无法将其复制到我们的编辑器中。非常漂亮的图像!我把它改成了代码你真的用那种方式格式化代码吗?这样做无助于理解代码和查找bug。。。或者它只是一个论坛。从示例代码中删除前导的回勾号。反勾号用于内联代码段,而不是代码块。相反,用四个空格字符缩进代码的所有行。在文本编辑器中很容易做到。我应该将flush()方法放在哪里?我在while循环之后将flush()移动到,但它仍然不起作用