如何在jsp中的数据库中最后创建的图像显示

时间:2014-06-21 19:23:38

标签: java sql oracle jsp

这是我的代码。我在数据库中的文件夹和文件路径中有图像我希望通过最后创建的行检索所有图像我的意思是我要显示最后一张图像。

<%@ include file="getcon.jsp"%>
<html>
<head>
<title>View Image Page</title>
</head>
<body>
<table width="100%" border="0">
<!-- main content -->
<%
String type=request.getParameter("type");
String sql;

if(type!=null)
       {
    sql="SELECT PICTURE, TITLE, TAG, POST from testimage where type='"+type+"'";




ResultSet rs=null;
try
{

rs=st.executeQuery(sql);


while(rs.next())
{
%>
<table width="700%" height="600" border="1" align="center">
<tr>
<!-- Mention Directory where your images has been saved-->
 <% String filename=rs.getString(2);

                                  //System.out.println("filename isssssss"+filename);
                                  out.println("<b>"+filename+"</b>");
                                  out.println(application.getRealPath("/"));
                                  //session.setAttribute("download",filename);
                          %>

<td><img src="jokeimage\<%=rs.getString(1)%>" width="500" height="400" /></td>
</tr>
</table>
<%
}
}
catch(Exception e)
{
out.print(""+e.getMessage());
}
}
else{}
%>

2 个答案:

答案 0 :(得分:0)

我会选择PreparedStatement并绑定参数(因为当前查询容易受到SQL Injection),假设每个连续行的POST列值增加;可以在controller Servlet -

中执行类似的操作
sql="SELECT PICTURE, TITLE, TAG, POST from testimage where type=? ORDER BY POST DESC";
PreparedStatement ps = null;
try {
  ps = conn.prepareStatement(sql);
  ps.setString(1, type);
  rs = ps.executeQuery();
  // ... Read the ResultSet ...
} finally {
  try {
    rs.close();
  } catch (Exception ignored) {
  }
  try {
    ps.close();
  } catch (Exception ignored) {
  }
}

答案 1 :(得分:0)

始终尝试避免 Scriplet元素,而是使用更易于使用且不易出错JSP Standard Tag Library

您可以使用专为访问JSP中的数据库而设计的SQL Tag Library

示例代码:(更改数据库URL和凭据

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/db" user="root" password="" />

<sql:query dataSource="${dataSource}" sql="SELECT PICTURE, TITLE from testimage where type=? ORDER BY CREATION_DATE DESC" var="result">
    <sql:param value="${param.type}"/>
</sql:query>

<table width="100%" height="600" border="1" align="center">
    <c:forEach var="row" items="${result.rows}">
        <tr>
            <td><b>${row.tag}</b></td>
            <td><img src="${pageContext.request.contextPath}/jokeimage/${row.picture}" width="500" height="400" /></td>
        </tr>
    </c:forEach>
</table>

我是如何将其转换为JSTL&amp;来自Scriplet的EL?

  1. ${param.type}用于request.getParameter("type")
  2. ${pageContext.request.contextPath}用于application.getRealPath("/")
  3. c:forEach标记用于while循环
  4. sql:param用于参数化查询
  5. sql:setDataSource用于创建数据源
  6. sql:query用于执行查询