# Mehrere Bilder aus MySQL DB via Servlet darstellen.



## FanClub (6. Sep 2015)

Hallo,

ich lese via Servlet - Tomcat - MySQL Daten aus einer Datenbank aus.
Darunter sind auch pro Datensatz ein Bild als LongBlob hinterlegt.

Ich versuche nun alle Datensätze inklusive Bild via Servlet auszugeben. Aber das funktioniert nicht.


```
while (rs.next()) {

         String id = rs.getString("id");
         String titel = rs.getString("titel");
        
         java.sql.Timestamp timestamp = rs.getTimestamp("erstelltam");
         SimpleDateFormat sp = new SimpleDateFormat("MM/dd/yyyy' 'HH:mm");
         Date erstellt = new Date(timestamp.getTime());

         sb.append("<td align='center'><a href='/AbschlussArbeit/ArtikelServlet?id=" + id
             + "'><img src='" + "RetriveImage?" + id + "'  width='204' height='190'></a><br> Erstellt am:"
             + sp.format(erstellt) + "<br><font-size=12>" + titel + "</font></td>");
}
```


```
public class RetriveImage extends HttpServlet {

   Connection con;
   CallableStatement stat;

   /**
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
    * methods.
    *
    * @param request
    *  servlet request
    * @param response
    *  servlet response
    * @throws ServletException
    *  if a servlet-specific error occurs
    * @throws IOException
    *  if an I/O error occurs
    */
   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     // response.setContentType("text/html;charset=UTF-8");
     response.setContentType("image/jpeg");
     // PrintWriter out = response.getWriter();
     Blob ePhoto = null;
     byte[] rawBytes = null;
     ServletOutputStream out = response.getOutputStream();
     Connection conn = null;
     Statement st = null;
     ResultSet rs = null;
     StringBuffer selectStatement = new StringBuffer();
     try {
       /*
        * TODO output your page here. You may use following sample code.
        */
       // byte[] rawBytes = null;
       String id = request.getQueryString();
       InitialContext ctx = new InitialContext();
       DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/TestDB");

       // This works too
       // Context envCtx = (Context) ctx.lookup("java:comp/env");
       // DataSource ds = (DataSource) envCtx.lookup("jdbc/TestDB");

       conn = ds.getConnection();

       st = conn.createStatement();

       selectStatement.append("SELECT * FROM artikel WHERE id="+id);
       rs = st.executeQuery(selectStatement.toString());
       rs.next();
       rawBytes = rs.getBytes(1);
       out.write(rawBytes);
       out.flush();
       stat.close();
     } catch (Exception ex) {
       out.println(ex.getMessage());
     } finally {
       try {
         con.close();
         out.close();
       } catch (Exception ex) {
       }
     }
   }
}
```

Es wird nicht mal das Servlet angesprochen. RetriveImage.

Oder gibt es eine andere Möglichkeit aus einer Datenbank Text und Bild anzuzeigen. Mehrere.

gruß


----------



## FanClub (8. Sep 2015)

Hallo,

ich habe es gelöst.

In einem Servlet lese ich alle Daten aus der Datenbank aus, bis auf die Bilder.
Diese Daten schreibe ich als Liste in den Request.

```
request.setAttribute("liste", liste);
request.getRequestDispatcher("/thankyou.jsp").forward(request, response);
```

Mit Hilfe des Servlet erzeuge ich keinen HTML Code mehr. Das übernimmt alles eine JSP.
Auf dieser thankyou.jsp lese ich die Liste aus.
Danach ermittle ich mit Hilfe der ID eines jeden Datensatzes das dazugehörige Bild.
Dafür gibt es ein Servlet.

```
<img src="/BilderAbholServlet?id=<%=datensatz.getId()%>"
```

Ist zwar ne menge Traffic aber geht.


----------

