【问题标题】:displaying multiple records by using resultset使用结果集显示多条记录
【发布时间】:2010-12-22 07:26:18
【问题描述】:

如何使用结果集语句显示数据库中具有相同字段值的多条记录

【问题讨论】:

    标签: sql-server servlets jdbc


    【解决方案1】:

    首先创建一个Javabean 类,它代表表的一行。我不知道你在说什么数据,但让我们以User 作为现实世界的例子:

    public class User {
        private Long id;
        private String name;
        private Integer age;
        // Add/generate public getters and setters.
    }
    

    以上当然是一个例子。您需要根据实际数据所代表的内容来命名类和属性。

    现在创建 DAO 类,它在 JDBC 的帮助下完成所需的数据库交互任务。您只需确保在类路径中有正确的 SQL Server JDBC 驱动程序。我可以为此推荐 jTDS,因为它比 Microsoft 自己的 JDBC 驱动程序更好更快。好的,假设您要列出所有具有相同ageUsers:

    public List<User> listByAge(Integer age) throws SQLException {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        List<User> users = new ArrayList<User>();
    
        try {
            connection = database.getConnection();
            statement = connection.prepareStatement("SELECT id, name, age FROM user WHERE age = ?");
            statement.setInt(1, age);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                User user = new User();
                user.setId(resultSet.getLong("id"));
                user.setName(resultSet.getString("name"));
                user.setAge(resultSet.getInt("age"));
                users.add(user);
            }
        } finally {
            if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
            if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
            if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
        }
    
        return users;
    }
    

    现在创建一个 Servlet 类 UsersServlet,它在 doGet() 方法中对数据进行预处理。

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<User> users = userDAO.list();
        request.setAttribute("users", users);
        request.getRequestDispatcher("/WEB-INF/users.jsp").forward(request, response);
    }
    

    在 web.xml 中映射这个 servlet,如下所示:

        <servlet>
            <servlet-name>users</servlet-name>
            <servlet-class>mypackage.UsersServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>users</servlet-name>
            <url-pattern>/users</url-pattern>
        </servlet-mapping>
    

    注意&lt;url-pattern&gt;,你可以通过http://example.com/context/users来执行这个servlet。

    现在创建一个 JSP 文件 users.jsp 并将其放在 WEB-INF 文件夹中,这样任何人都可以在不使用 servlet 的情况下直接访问它。您可以使用JSTL c:forEach 来迭代List

    <table>
        <thead>
            <tr><th>ID</th><th>Name</th><th>Age</th></tr>
        </thead>
        <tbody>
            <c:forEach items="${users}" var="user">
                <tr><td>${user.id}</td><td>${user.name}</td><td>${user.age}</td></tr>
            </c:forEach>
        </tbody>
    </table>
    

    http://example.com/context/users 执行。应该是这样的。

    【讨论】:

      【解决方案2】:

      您必须创建一个 POJO 来存储通过查询获得的数据,然后通过 ResultSet 您可以迭代从 DB Query 执行获得的每一行。

      所以你会得到一个对象列表(POJO)。这可以在任何你想要的地方使用。 http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html

      http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2691&lngWId=2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 2012-10-18
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        相关资源
        最近更新 更多