简体   繁体   English

SQLException:使用数据库用户的Jsp登录身份验证?

[英]SQLException: Jsp login authentication with database user?

I am trying to create a Login form using JSP. 我正在尝试使用JSP创建一个Login表单。 I could successfully add a user to the database table but while trying to authenticate the user stored in the Database I am getting an SQLException . 我可以成功地将用户添加到数据库表中,但是在尝试对存储在数据库中的用户进行身份验证时,出现了SQLException

Servlet.java : Servlet.java:

//Registration
    if(action.equalsIgnoreCase("Register")){

        nme = request.getParameter("username");
        pwd = request.getParameter("password");

        System.out.println("Values From Submmited JSP page:");
        System.out.println("Name = "+nme+"\nPassword = "+pwd);

        Mymodel m1 = new Mymodel();
        m1.setName(nme);
        m1.setPassword(pwd);

        int s = MyService.insertToModel(m1);
        System.out.println("service return"+ s);
        if(s > 0){
            response.sendRedirect("Welcome.jsp");}
        else{
            response.sendRedirect("index.jsp");}
    }//End of Registration




    //Login
        if(action.equalsIgnoreCase("login")){
        nme = request.getParameter("username");
        pwd = request.getParameter("password");

        System.out.println("Values From Submmited JSP page:");
        System.out.println("Name = "+nme+"\nPassword = "+pwd);

        Mymodel m = new Mymodel();
        m.setName(nme);
        m.setPassword(pwd);         

        boolean s = MyService.authenticateLogin(m);
        if(s){
            response.sendRedirect("welcome.jsp");           
        }else{
            response.sendRedirect("Loginfailure.jsp");
        }
        //End of login

service.java : service.java:

public static boolean authenticateLogin(Mymodel m){

    try{
        PreparedStatement ps = con.prepareStatement("SELECT Uname,Password FROM user WHERE Uname ='?' AND Password ='?'");
        ps.setString(1, m.getName());
        ps.setString(2, m.getPassword());
        ps.executeQuery();
        return true;

    }catch( Exception e ){
        System.out.println("Unable to select values from the table");
        e.printStackTrace();
        return false;
    }

Eclipse console output : Eclipse控制台输出:

Connection : com.mysql.jdbc.Connection@6aa5a8d0

Successfully connected to Database Unable to select values from the table 成功连接到数据库无法从表中选择值

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2715)
    at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:3546)
    at Service.MyService.authenticateLogin(MyService.java:35)
    at MyServlet.MyServlet.doPost(MyServlet.java:68)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

What is the problem with the code and is there a better way to write code for the application I am building? 代码有什么问题,是否有更好的方法为正在构建的应用程序编写代码?

 PreparedStatement ps = con.prepareStatement("SELECT Uname,Password FROM user WHERE Uname ='?' AND Password ='?'");

从上面的代码中,请删除占位符中的引号,您可以成功连接并能够登录到该页面。

 PreparedStatement ps = con.prepareStatement("SELECT Uname,Password FROM user WHERE Uname =? AND Password =?");

Remove apostrophes inside your query near question marks: 删除查询中问号附近的撇号:

PreparedStatement ps = con.prepareStatement("SELECT Uname, Password FROM user WHERE Uname = ? AND Password = ?");

Example query is also in javadoc for PreparedStatement class. javadoc中也有针对PreparedStatement类的示例查询。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用 JDBC 和 JSP 进行登录身份验证:如何检查用户输入的用户名和密码是否存在于数据库中? - Login Authentication using JDBC and JSP : How to check if the username and Password entered by the user exists in the Database? JSP中的登录身份验证和会话 - Login Authentication and session in JSP SQLException:用户''JAVA登录失败 - SQLException: Login failed for user ' ' JAVA 如何仅使用文件而不使用数据库来构建用户认证和登录系统? - How to build an user authentication and login system using only a file but not database? 使用java类,servlet,jsp以及会话和数据库进行简单的登录身份验证 - make a simple login authentication using java class,servlet,jsp and session and database 在 JSP 页面中获取用户的登录信息 - Get the login of a user in the JSP page 在jsp页面中使用指纹进行登录身份验证 - Login authentication using fingerprint in jsp page java.sql.SQLException:用户'admin'登录失败 - java.sql.SQLException: Login failed for user 'admin' 接收连接到SQL Server 2008的SQLException“用户登录失败” - Receiving SQLException “Login failed for user” connecting to SQL Server 2008 RESTEasy Java中的用户登录身份验证 - User Login Authentication in RESTEasy java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM