猿问

从数据库中获取 NULL 值

我正在尝试使用以下方法显示我的数据库中的一些数据,但它只显示 NULL 值。我不确定我是否有正确的方法实现,所以如果在调用 select() 方法时我应该更改任何内容。预先感谢您的任何帮助。


//选择方法


public Res select(int id) {

            Res res = new Res();

            Connection connection = null;

            PreparedStatement preparedStm = null;

            ResultSet resultSet = null;


            try {

                connection = ConnectionConfiguration.getConnection();

                preparedStm = connection.prepareStatement("SELECT * FROM res WHERE id = ?");

                preparedStm.setInt(1, id);

                resultSet = preparedStm.executeQuery();


                while(resultSet.next()) {


                    res.setId(resultSet.getInt("id"));

                    res.setDay(resultSet.getString("res"));

                    res.setNoRooms(resultSet.getString("rooms"));

                    res.setNoNights(resultSet.getString("nights"));

                    res.setRoomType(resultSet.getString("room_type"));

                    res.setUser_email(resultSet.getString("email"));


                }


            } catch(Exception e) {

                e.printStackTrace();

            } finally {

                if (resultSet != null) {

                    try {

                        resultSet.close();

                    } catch (SQLException e) {


                        e.printStackTrace();

                    } 

                }

                if (preparedStm != null) {

                    try {

                        preparedStm.close();

                    } catch (SQLException e) {


                        e.printStackTrace();

                    }

                }

                if (connection != null) {

                    try {

                        connection.close();

                    } catch (SQLException e) {


                        e.printStackTrace();

                    }

                }

            }


            return res;


        }



qq_遁去的一_1
浏览 288回答 2
2回答

小怪兽爱吃肉

首先值得一提的是,我们不再使用 scriptlet。以下是一些解释原因的信息:自从 2001 年标签库(如JSTL)和 EL(表达式语言,那些东西)诞生以来,在JSP 中使用scriptlet(那些<% %>东西)确实是非常不鼓励的。${}Scriptlet的主要缺点是:可重用性:您不能重用 scriptlet。可替换性:您不能使 scriptlet 抽象。面向对象的能力:你不能使用继承/组合。可调试性:如果 scriptlet 中途抛出异常,你得到的只是一个空白页面。可测试性: scriptlet 不可单元测试。可维护性:每个 Saldo 需要更多时间来维护混合/混乱/重复的代码逻辑。Sun Oracle 本身也建议在JSP 编码约定中,只要(标记)类可以实现相同的功能,就应避免使用scriptlet。这里有几个相关的引用:根据 JSP 1.2 规范,强烈建议在 Web 应用程序中使用 JSP 标准标记库 (JSTL),以帮助 减少页面中对 JSP 脚本的需求。使用 JSTL 的页面通常更易于阅读和维护。...在可能的情况下,只要标记库提供等效功能,就应避免使用 JSP scriptlet。这使页面更易于阅读和维护,有助于将业务逻辑与表示逻辑分开,并使您的页面更容易演变为 JSP 2.0 样式的页面(JSP 2.0 规范支持但不强调使用 scriptlet)。...本着采用模型-视图-控制器 (MVC) 设计模式来减少表示层与业务逻辑之间的耦合的精神,不应使用 JSP 脚本来编写业务逻辑。相反,如果有必要,使用 JSP scriptlet 将处理客户端请求返回的数据(也称为“值对象”)转换为适当的客户端就绪格式。即便如此,最好使用前端控制器 servlet 或自定义标记来完成。以上引自这个精彩的答案: 如何避免 JSP 文件中的 Java 代码?好的,现在您明白为什么不应该使用脚本了。那么我们还应该如何在我们的 JSP 页面中做我们想做的事情呢?这就是 JSTL 和 EL 的用武之地。为了在您的项目中使用 JSTL(如果您不使用 maven),您所要做的就是下载 JSTL .jar 文件:https : //mvnrepository.com/artifact/javax .servlet/jstl/1.2并将其包含在您的lib文件夹中(位于 WEB-INF 内)。如果您没有该文件夹,请创建一个并在那里添加 .jar 文件。这是一个很好的资源,展示了你可以用它做的所有事情。然后为了在您的 JSP 中使用它,只需在 JSP 文件的顶部包含核心库:<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>现在回到你的问题。问题出在这里:Reservation r = new Reservation();&nbsp;&nbsp; &nbsp;Res rb = new Res();&nbsp; &nbsp;r.select(rb.getId());当你在这里使用 rb.getId() 并且像这样你得到 null 因为你本质上是这样做的:SELECT * FROM reservations WHERE id = null因为您在该行之前创建了一个新对象而没有设置 id(或其他任何内容)Res rb = new Res();您需要做的是从您的 servlet 传递对象,然后您就可以使用它了。(不创建 res 的新对象)例如,如果你这样做它应该工作:&nbsp; &nbsp;Reservation r = new Reservation();&nbsp;&nbsp; &nbsp;Res rb = new Res();&nbsp; &nbsp;rb.setId(1); //set the id&nbsp;&nbsp; &nbsp;r.select(rb.getId());但同样,你不想这样做。因为它涉及小脚本。他们很烂。由于您的项目中现在有 jstl,这里有一个关于如何使用 JSTL 执行此操作的示例:预订状态.jsp:<h1 align="center"> Reservation </h1><br><table border="1" width="50%" align="center"><tr><th colspan="3">Date</th><th>Rooms</th><th>Nights</th><th>Room type</th><th>Comments</th><th>Status</th></tr><tr><td>${Reservation.day}</td><td>${Reservation.month}</td><td>${Reservation.year}</td><td>${Reservation.noRooms}</td><td>${Reservation.noNights}</td><td>${Reservation.roomType}</td><td>${Reservation.comments}</td><td>${Reservation.status}</td></table>Wayyy清洁工对吗?您实际上不需要 JSTL,因为您在这里只使用 EL。但同样,如果您只是尝试直接访问 jsp 页面,您将看不到任何内容。您需要 servlet 将数据传递给 jsp。为了让您更轻松地进行测试,我将做的是将您的 RESERVATION servlet 中的 doPost 更改为 doGet。这样,如果在浏览器中输入为此 servlet 映射的 url:http://localhost:9191/ReservationServletUrl,它将运行 servlet 并将详细信息转发到 jsp。(因为 doPost 不能像那样直接通过 url 访问,只有 doGet 是)希望这可以帮助。如果您在理解任何内容时遇到困难,请告诉我!

MMMHUHU

我改变了它并将代码放在一个 Servlet 中,如下所示,现在我使用电子邮件地址显示数据,因为它使一切变得更容易。我是这样做的。protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {&nbsp; &nbsp; HttpSession s = request.getSession();&nbsp; &nbsp; ResBean res = new ResBean();&nbsp; &nbsp; Connection connection = null;&nbsp; &nbsp; PreparedStatement preparedStm = null;&nbsp; &nbsp; ResultSet resultSet = null;&nbsp; &nbsp; String user_email = String.valueOf(s.getAttribute("uemail"));&nbsp; &nbsp; PrintWriter out = response.getWriter();&nbsp; &nbsp; out.println("<html><body><center><h1> Reservation Status</h1></center><br><h4 align=\"center\"> Rezervimi nga perdoruesi me email: " + user_email);&nbsp; &nbsp; out.println("<table border=\"1\" width=\"50%\" align=\"center\">");&nbsp; &nbsp; out.println("<tr><th colspan=\"3\">Data</th><th>Numri i dhomave</th><th>Numri i neteve</th>"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + "<th>LLoji i dhomes</th><th>\r\n" +&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Kerkesa</th><th>Statusi</th></tr>");&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; connection = ConnectionConfiguration.getConnection();&nbsp; &nbsp; &nbsp; &nbsp; preparedStm = connection.prepareStatement("SELECT * FROM reservations WHERE user_email = ?");&nbsp; &nbsp; &nbsp; &nbsp; preparedStm.setString(1, user_email);&nbsp; &nbsp; &nbsp; &nbsp; resultSet = preparedStm.executeQuery();&nbsp; &nbsp; &nbsp; &nbsp; while(resultSet.next()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setDay(resultSet.getString("res_day"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setMonth(resultSet.getString("res_month"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setYear(resultSet.getString("res_year"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setNoRooms(resultSet.getString("no_rooms"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setNoNights(resultSet.getString("no_nights"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setRoomType(resultSet.getString("room_type"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setComments(resultSet.getString("add_comments"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setStatus(resultSet.getString("res_status"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.setUser_email(resultSet.getString("user_email"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; out.println("<tr><td>" + res.getDay() +"</td><td>"+ res.getMonth() + "</td><td>" + res.getYear() +"</td><td>"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + res.getNoRooms() + "</td><td>" + res.getNoNights() + "</td><td>" + res.getRoomType() + "</td><td>" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res.getComments() + "</td><td>" + res.getStatus() + "</td></tr>");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } catch(Exception e) {&nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; } finally {&nbsp; &nbsp; &nbsp; &nbsp; if (resultSet != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resultSet.close();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (SQLException e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (preparedStm != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; preparedStm.close();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (SQLException e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (connection != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.close();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (SQLException e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; out.println("</table></body></html>");&nbsp;}}
随时随地看视频慕课网APP

相关分类

Java
我要回答