按特定顺序从ResultSet检索并显示值

时间:2018-09-26 06:37:36

标签: java mysql database jsp servlets

我正在从数据库中检索记录并显示在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

2 个答案:

答案 0 :(得分:0)

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"); %> <%
}

答案 1 :(得分:0)

您可能应该在这里使用表格。下面的脚本创建了一个三列宽的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页面中获得一致输出的好方法。