在一個簡單的servlet代碼中,
我得到一個NULLPointerException查詢準備好的語句時拋出。
據我所知,當一個對象定義null被賦予一些新的值時拋出空指針異常。
但我不知道如何更改以下代碼才能正常運行。
servlet中發生空指針異常嗎?
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 在data.DataLogic.login(DataLogic.java:22) 在serv.login.doPost(login.java:35) 在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.doFilt ER(ApplicationFilterChain.java:210) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 在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。調用(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) a牛逼org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589) 在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(未知來源) Blockquote
請幫助。提前預測。
請發佈異常堆棧跟蹤。 – sleske
@sleske:堆棧跟蹤在NPE中通常是無益的。如果OP本身告訴哪個變量哪一行是'null'(因爲OP已經在代碼註釋中做了),它會更有幫助。由於構造函數中的異常處理完全中斷,'con'變量只是'null'。 Harvish,你有這個代碼中的其他嚴重問題:http://stackoverflow.com/questions/9428573/is-it-safe-to-use-a-static-java-sql-connection-instance-in-a-多線程系統/ – BalusC
狂野未受教育的猜測:您在調用'DataLogic.login(...)'之前沒有實例化一個'DataLogic'對象,所以沒有'con'對象。 – mthmulders