2014-06-21 84 views
1

这是我的代码。我有数据库中的文件夹和文件路径中的图像我想检索所有图像的最后创建的行我的意思是我想显示第一个最后的图像。如何显示图像最后在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{} 
%> 
+1

请尽量避免* Scriplet *代替使用JSTL&EL。 – Braj

+0

确切的问题在哪里?在从服务器访问数据库或图像时,请详细解释一下? – Braj

回答

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) { 
    } 
} 
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 & EL从Scriplet?

  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用于执行查询
相关问题