ResultSet.next()没有迭代
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ResultSet.next()没有迭代相关的知识,希望对你有一定的参考价值。
我的代码:
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();
}
}
}
它只显示第一行而不是其余部分,为什么会这样做?注意:出于此示例,密码和用户名不是真实的。
答案
你在qazxsw poi上迭代,因为qazxsw poi将光标从当前位置向前移动一行,并在读取最后一个位置时返回ResultSet
。
问题是你在每次迭代时都在冲洗next()
。
在false
上调用httpResponse.outputstream
会提交HTTP响应。
所以你不能在第一次迭代后写任何东西。
我不认为您可以发送具有图像内容类型的多个图像:
flush()
如果您想使用此内容类型,则可以创建一个包含所有内容的大图像。 但它真的有意义吗?
我怀疑你不需要使用:
PrintWriter
但是,您应该使用首先应生成的图像URL在客户端页面中显示图像。
然后,您可以使用JSTL或scriplet迭代url图像,将它们呈现为html response.setContentType("image/png");
元素。
以上是关于ResultSet.next()没有迭代的主要内容,如果未能解决你的问题,请参考以下文章
当 sql 语句没有返回任何行时,resultset.next() 总是返回 true