gpt4 book ai didi

java - servlet中出现空指针异常?

转载 作者:太空宇宙 更新时间:2023-11-03 12:25:22 24 4
gpt4 key购买 nike

在一个简单的 servlet 代码中,
我在向准备好的语句提供查询时抛出一个 NULLPointerException

据我了解,当为定义为 null 的对象赋予一些新值时,会抛出空指针异常。

但我不确定如何更改以下代码才能正常运行。

import java.sql.*;

public class DataLogic {
static Connection con;
static PreparedStatement ps;
static ResultSet rs;

DataLogic() {
try{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root","");
} catch(Exception e){
e.printStackTrace();
}
}

public static boolean login(String user, String pass) {
boolean b=false;
try{
/*Exception thrown in next line*/
ps=con.prepareStatement("select * from login where uname=? and pass like ?");
ps.setString(1, user);
ps.setString(2, pass);
rs=ps.executeQuery();
//System.out.print(b=rs.next());
} catch(Exception e){
e.printStackTrace();
}
return b;
}

}

PS:这是从 servlet 调用的。

更新:

java.lang.NullPointerException at data.DataLogic.login(DataLogic.java:22) at serv.login.doPost(login.java:35) at serv.login.doGet(login.java:26) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Blockquote

请帮忙。提前致谢。

最佳答案

这听起来像是 Class.forNameDriverManager.getConnection 失败了,所以 con 从未被赋予非空值。

与其仅仅在那里打印堆栈跟踪,还不如抛出一个异常——如果你愿意的话可能是一个运行时异常(因为你不能真正“处理”这种情况)。然后你可以尽快找到错误,而不是假装构造函数已经成功了。吞下像这样的异常几乎总是只会延迟问题而不是修复它,并且它使得以后更难诊断。

关于java - servlet中出现空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17971969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com