按特定顺序从 ResultSet 检索和显示值
Posted
技术标签:
【中文标题】按特定顺序从 ResultSet 检索和显示值【英文标题】:Retrieve and display values from ResultSet in paticular order 【发布时间】:2019-03-01 20:36:34 【问题描述】:我正在从数据库中检索记录并显示在 JSP 页面上,但记录是逐行显示的,但我想在一行中显示 3 条记录,第四条记录应该在下一行显示。
我的jsp代码:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.* "%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title></title>
</head>
<body>
<% Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/eco", "root", "vicky");
PreparedStatement ps = con.prepareStatement("select * from registration");
ResultSet rs=ps.executeQuery();
rs.afterLast();
while(rs.previous()) %>
<p> <%= rs.getString(2) %> </p>
<% %>
</body>
</html>
数据库结构:
ID username email password
1 vikas vikas5@gmail.com 44
2 Aravind Aravind@gmail.com 12
3 rakesh rakesh@gmail.com 123
4 chandra chnadra@gmail.com 123
5 shiva chinthala@gmail.com 12345
6 sai sai@gmail.com 4321
7 ravi ravi@gmail.com 987654
我的输出:
ravi
sai
shiva
chandra
rakesh
Aravind
vikas
但我希望输出为:
ravi sai shiva
chandra rakesh Aravind
vikas
【问题讨论】:
我不太了解 JSP,但是由于字符串被放入 html 中,是否可以将<p>
标签在其中将用户名放入一些 CSS 样式中来执行此操作?
【参考方案1】:
select * from registration order by id desc
并使用前向迭代。另外,我更喜欢rs.getString("username")
而不是rs.getString(2)
,因为将来有人可能会向表中添加一列(这里最好将查询限制为username
)。从 Java 6 (JDBC 4.0) 开始,您不需要使用 Class.forName
来注册您的 jdbc 驱动程序。最后,对于您的问题,保留一个计数器并每隔三行添加一个换行符。喜欢,
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/eco",
"root", "vicky");
PreparedStatement ps = con.prepareStatement("select username from registration order by id desc");
ResultSet rs = ps.executeQuery();
int count = 0;
while (rs.next())
if (++count % 3 == 0)
%><br /><%
%><%= rs.getString("username"); %> <%
【讨论】:
【参考方案2】:您可能应该在这里使用一张桌子。下面的小脚本构建了一个三列宽的 HTML 表格,然后按从左到右和从上到下的顺序填充。
<table colspan="3">
<% Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/eco", "root", "vicky");
PreparedStatement ps = con.prepareStatement("SELECT * FROM registration");
ResultSet rs = ps.executeQuery();
int i = 0;
while (rs.next())
if (i > 0 && i % 3 == 0) %>
</tr>
<%
if (i % 3 == 0) %>
<tr>
<% %>
<td> <% rs.getString("username") %> </td>
<% ++i; %>
</tr>
</table>
附带说明,如果您想订购来自 MySQL 表的用户名,那么您可能应该使用 ORDER BY
子句,例如
SELECT * FROM registration ORDER BY username;
一般来说,SQL 表没有内部顺序,其记录是根据无序集建模的。随着新数据的添加,您看到的当前顺序可能会在某个时候发生变化,因此使用ORDER BY
子句是在 HTML 页面中获得一致输出的好方法。
【讨论】:
以上是关于按特定顺序从 ResultSet 检索和显示值的主要内容,如果未能解决你的问题,请参考以下文章
如何按特定顺序从 select 中执行 Oracle SQL 更新?