当前位置: 首页 > 知识库问答 >
问题:

将SQL查询结果传递到ArrayList,将列表返回给servlet

钱凌
2023-03-14

我试图重构我的代码,在这样做的时候,我试图把SQL查询留给一个类。我试图将参数从html表单传递到servlet,然后servlet将这些参数传递到其方法params中的ApplicationDao,后者(应该)以用户对象arraylist的形式返回结果集。当我传递电子邮件时,它会说找不到列,尽管当我在servlet中执行完全相同的操作时,我正在重构结果。显然,由于这个问题,数组列表正在将长度0传回来!

我真的很困惑我做错了什么,任何建议都将不胜感激!

登录HTML表单

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Log In: Canadian Voting Portal</title>
<link rel="stylesheet" type="text/css" href="style2.css">
</head>
<body id="logInPage">
<div class="LogInContainer1">
<img src="images/CanadaLogo.jpg" width="150px" height="70px">
<h1 id="LogInHeading">Voting Portal Website & Access</h1>

<div class="LogInContainer2">

<div class="LogContainer3">
<form method="post" action="testServlet">
<label class="logInLabel" id="emailLabel" for="email">Email:</label>
<input class="logInInput" type="text" id="userEmail" name="email">
<br>
<label class="logInLabel" id="passwordLabel" for="password">Password:</label>
<input class="logInInput" type="text" id="userPassword" name="password">
<br>
<button id="logInButton" type="submit">LOG IN</button>
</form>
<p id="createParagraph">Don't have an account? Create one <a id="createLink" href="http://localhost:8080/CapstoneProject/CreateAccountServlet">here.</a> Forgot log-in information? Start the reset process of your account <a id="resetLink" href="http://localhost:8080/CapstoneProject/ResetPasswordServlet">here.</a></p>
</div>

</div>

</div>
</body>
</html>

应用程序DAO

public class ApplicationDao {

    

    public ArrayList<User> userLogIn(String email, String password){

        
        ArrayList<User> users = new ArrayList<User>();
        
        try{
            
            
        
            
            String sql="SELECT * FROM `user` WHERE email = ? and password = ?" ;
            
            Connection connection =DBConnection.getConnectionToDatabase();
            java.sql.PreparedStatement statement;
            
            statement = connection.prepareStatement(sql);
            statement.setString(1,email);
            statement.setString(2,password);
            
            
            ResultSet set = statement.executeQuery();
            
            if(set.next()){         
            
                User user = new User();
                
                user.setEmail(set.getString(email));
                user.setPassword(password);
                user.setDateOfBirth("DOB");
                user.setFirstName("firstName");
                user.setLastName("lastName");
                
                set.close();
                statement.close();
                
                users.add(user);
            }

        }
        catch(SQLException exception){
            exception.printStackTrace();
        }
        return users;
        
        }

    }

测试服务器

@WebServlet("/testServlet" )
public class testServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    //List<User> users = new ArrayList<User>();

    public testServlet() {
        super();
    }
   
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
    
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{
        
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        PrintWriter writer = response.getWriter();
        ApplicationDao dao = new ApplicationDao();
        ArrayList<User> user = dao.userLogIn(email,password);
        
        String DOB = user.get(0).getDateOfBirth();
        
        
        
        
        writer.write(email + DOB);
    }}

控制台(从servlet传递参数时)

MySQL JDBC Driver Registered!
Connection made to DB!
java.sql.SQLException: Column 'caytegibbons@gmail.com' not found.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.result.ResultSetImpl.findColumn(ResultSetImpl.java:584)
    at com.mysql.cj.jdbc.result.ResultSetImpl.getString(ResultSetImpl.java:896)
    at dao.ApplicationDao.userLogIn(ApplicationDao.java:45)
    at servlets.testServlet.doPost(testServlet.java:51)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)
Jul. 19, 2022 10:16:10 A.M. org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [servlets.testServlet] in context with path [/CapstoneProject] threw exception
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
    at java.base/java.util.Objects.checkIndex(Objects.java:372)
    at java.base/java.util.ArrayList.get(ArrayList.java:459)
    at servlets.testServlet.doPost(testServlet.java:53)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)

控制台(硬编码参数时)

共有1个答案

白和泽
2023-03-14

错误位于应用程序DAO的第45行,查看堆栈跟踪:

    at dao.ApplicationDao.userLogIn(ApplicationDao.java:45)

我想是这样的:

java prettyprint-override">user.setEmail(set.getString(email));

您将电子邮件变量作为列名传递。它应该是:

user.setEmail(set.getString("email"));
 类似资料:
  • 问题内容: 我正在使用RODBC软件包访问R中的sql数据库。我无法找到有关如何将向量从R作为向量传递给sql的任何有用信息。 我想将id向量传递给sql而不是对其进行硬编码。 问题答案: 新包装对此有最佳答案。它允许使用任何R对象,并将其自动转换为SQL https://db.rstudio.com/dplyr/

  • 问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作

  • 注:[2017年1月11日]RestInfoAdapter.java的源代码已经更改和更新(参见下面的第2项) 我一直在尝试通过保留原始输入列表的备份/副本来使我的搜索视图返回到原始列表。但是,它根本不起作用。我的这个问题包括使用自定义类的RecyclerView和ArrayList。 是一个名为<code>RestInfo 我是如何尝试的 适配器类,以便RestInfo可以呈现在卡片视图中(因此

  • 问题内容: 我有一个整数或字符串列表,需要将其作为Delphi DataSet的参数传递。怎么做? 这是一个例子。MyQuery类似于: 我将参数设置为列表或数组或其他内容: 它将导致此查询发送到sql服务器: 如果该解决方案也可以与字符串一起使用,则执行以下查询会更好: 变得: 我相信这是一个简单的问题,但是“ IN”并不是搜索网络的好关键字。 请回答如何在IDE中配置参数,查询以及如何传递参数

  • 我有下面的SQL查询,我在flink工作中使用。< code>mysql_table是使用JDBC连接器创建的,而< code>kafa_source表是从传入的kafka流创建的。 我在两者之间执行时态连接,当我在Flink的sql-client CLI中检查时,运行良好(用< code>flink-faker测试)。内部查询工作得非常好,并且正在打印结果。有人能帮助我找出这个问题吗? 编辑:我

  • 问题内容: 我需要在node.js中用猫鼬返回查询的结果。 如何返回值以将值设置为变量? 我需要做的是: 为了有: 非常感谢您的回复 。 我还有另一个问题。 如何使用find或findOne在查询运算符中传递变量?喜欢 : 问题答案: 有几种方法可以实现您想要的。 1.使用猫鼬查询 在这种策略中,您的函数返回一个Mongoose查询,您以后可以使用它来调用该方法并使用它来获取结果。 然后,您可以简