JSp

无法通过jsp显示数据库中的所有信息

发布于 2021-02-01 16:23:42

我的要求是通过jsp将艺术家详细信息和他的图片插入oracle数据库,并通过另一个jsp程序检索回信息和图片。

artist表有五列,四列是varchar2,第五列是blob类型。

我已经成功插入并能够成功检索,但是它只显示图像的问题。下面是代码。我被困住了。我需要帮助。请给我建议。

            PreparedStatement ps=con.prepareStatement("select * from artist");
            ResultSet rs=ps.executeQuery();
            while(rs.next()){ %>
            <table><tr><th>artist fast name:</th><td><%=rs.getString(1) %></td></tr> 
                <tr><th>artist middle name:</th><td><%=rs.getString(2) %></td></tr>
                <tr><th>artist last name</th><td><%=rs.getString(3) %></td></tr>
                <tr><th>artist job</th><td><%=rs.getString(4) %></td></tr>
                <tr><th>artist image</th><td><img src="
            <%
                Blob bl=rs.getBlob(5);
                byte[] image=bl.getBytes(1, (int)bl.length());
                response.setContentType("image/jpeg");
                OutputStream o = response.getOutputStream();
                o.write(image);
                o.flush();
                o.close();
         }
            %>" height="100" width="100" alt="bye"/> </td></tr>
            </table> 
                <%
           con.close();
关注者
0
被浏览
109
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    从版本6开始,Java SE提供了JAXB,通过它可以将 字节 转换为 base64 string 。在这里,您还可以将图像byte[]转换为以
    64基数的字符串 ,并且可以使用<img html
    标记显示该图像,将src数据指定为以64为基数,即src="data:image/png;base64,

    修改您的代码,如下所示:

    <%
                PreparedStatement ps=con.prepareStatement("select * from artist");
                ResultSet rs=ps.executeQuery();
                while(rs.next()){ %>
                <table><tr><th>artist fast name:</th><td><%=rs.getString(1) %></td></tr> 
                    <tr><th>artist middle name:</th><td><%=rs.getString(2) %></td></tr>
                    <tr><th>artist last name</th><td><%=rs.getString(3) %></td></tr>
                    <tr><th>artist job</th><td><%=rs.getString(4) %></td></tr>
                    <tr><th>artist image</th><td>
                    <%
                    Blob bl=rs.getBlob(5);
                    byte[] image=bl.getBytes(1, (int)bl.length());
                    %>
                    <img src="data:image/jpeg;base64, <%=javax.xml.bind.DatatypeConverter.printBase64Binary(image)%>
                " height="100" width="100" alt="bye"/> </td></tr>
                </table> 
                    <%
                    }
                    con.close();
              %>
    

    这是另一个清晰的 jsp 示例页面:

    <%@page import="java.awt.image.BufferedImage"%>
    <%@page import="javax.imageio.ImageIO"%>
    <%@page import="java.io.*"%>
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <%
    BufferedImage bImage = ImageIO.read(new File("/home/visruth/Desktop/Visruth.jpg"));//give the path of an image
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write( bImage, "jpg", baos );
    baos.flush();
    byte[] imageInByteArray = baos.toByteArray();
    baos.close();
    String b64 = javax.xml.bind.DatatypeConverter.printBase64Binary(imageInByteArray);
    %>
    
    <div>
        <p>As of v6, Java SE provides JAXB</p>
        <img src="data:image/jpg;base64, <%=b64%>" alt="Visruth.jpg not found" />
    </div>          
    </body>
    </html>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看