1

こんにちは私はサーブレットを使用してOracleデータベースからBLOBイメージを読み取り、それをhtmlページに表示しています

私のサンプルコードは

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String driver = "oracle.jdbc.driver.OracleDriver";
        final String url = "jdbc:oracle:thin:@//157.227.32.153:1521/DNADB5";
        final String username = "flex_user";
        final String password = "flex_user";
        int id=Integer.parseInt(request.getParameter("id"));
        String query = "SELECT img_id,MP_ID , icon FROM Account_images where MP_ID=" +id;
        ServletOutputStream out = response.getOutputStream();
        try {
            System.out.println("Getting connection");
             Class.forName(driver);
             conn = DriverManager.getConnection(url, username, password);

             stmt = conn.createStatement();
             rs = stmt.executeQuery(query);
             response.setContentType("text/html");
             if (rs.next()) {
               InputStream in = rs.getBinaryStream("icon");

               int bufferSize = 1024;
               byte[] buffer = new byte[bufferSize];
               int len=0;
               while ((len=in.read(buffer)) != -1) {
                // System.out.println("writing " + length + " bytes");
                 out.write(buffer, 0, len);
               }
               System.out.println("writed.");
               in.close();
               out.flush();
             }

このコードを使用すると、単一の画像を表示できますが、同じMP_IDを持つすべての画像を表示する必要があります。誰か助けてもらえますか?

前もって感謝します..

4

1 に答える 1

0

「if」の代わりに「while」を使用してみてください。(「if」はループではありません。)次のようなもの...

    try {
        System.out.println("Getting connection");
         Class.forName(driver);
         conn = DriverManager.getConnection(url, username, password);

         stmt = conn.createStatement();
         rs = stmt.executeQuery(query);
         response.setContentType("text/html");
         /*if (rs.next()) { */ // INCORRECT
         if(!rs.isBeforeFirst()){
           /* NO DATA */
         } else {
         /* YOU HAVE DATA */
         while(rs.next()){
           InputStream in = rs.getBinaryStream("icon");

           int bufferSize = 1024;
           byte[] buffer = new byte[bufferSize];
           int len=0;
           while ((len=in.read(buffer)) != -1) {
            // System.out.println("writing " + length + " bytes");
             out.write(buffer, 0, len);
           }
           System.out.println("writed.");
           in.close();
           out.flush();
         }

これにより、最初の結果だけでなく、結果セット内のすべての結果が確認されます。

于 2013-03-26T05:50:04.383 に答える