这是我的代码。我在数据库中的文件夹和文件路径中有图像我希望通过最后创建的行检索所有图像我的意思是我要显示最后一张图像。
<%@ 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{}
%>
答案 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?
${param.type}
用于request.getParameter("type")
${pageContext.request.contextPath}
用于application.getRealPath("/")
c:forEach
标记用于while
循环sql:param
用于参数化查询sql:setDataSource
用于创建数据源sql:query
用于执行查询