ResultSet.next()没有迭代

问题描述 投票:-1回答:1

我的代码:

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();
        }

    }
}

输出:enter image description here

它只显示第一行而不是其余部分,为什么会这样做?注意:出于此示例,密码和用户名不是真实的。

java sql iteration resultset
1个回答
2
投票

你在qazxsw poi上迭代,因为qazxsw poi将光标从当前位置向前移动一行,并在读取最后一个位置时返回ResultSet

问题是你在每次迭代时都在冲洗next()。 在false上调用httpResponse.outputstream会提交HTTP响应。 所以你不能在第一次迭代后写任何东西。

我不认为您可以发送具有图像内容类型的多个图像:

flush()

如果您想使用此内容类型,则可以创建一个包含所有内容的大图像。 但它真的有意义吗?

我怀疑你不需要使用:

PrintWriter

但是,您应该使用首先应生成的图像URL在客户端页面中显示图像。 然后,您可以使用JSTL或scriplet迭代url图像,将它们呈现为HTML response.setContentType("image/png"); 元素。

© www.soinside.com 2019 - 2024. All rights reserved.