[英]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 =?");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.