gpt4 book ai didi

java - JSP不访问数据库导致的NullPointerException

转载 作者:行者123 更新时间:2023-11-29 13:37:12 25 4
gpt4 key购买 nike

我正在开发一个项目,该项目使用 jdbc 驱动程序访问 PostgreSQL,并通过中间件处理这些数据,最后通过 jsp 页面显示/更新。我使用 Eclipse 创建了一个动态 Web 项目。然后我已经编写了所有后端和中间件操作的代码。我可以从静态上下文访问数据库(我的意思是 java 源代码的主要方法)。如果我不调用任何访问数据库的方法,我也可以从 jsp 使用我的 java 资源(例如显示)。但是当我尝试访问数据库时,它不起作用并给我一个空指针异常。

<jsp:useBean id="user" class="dbActionManagement.UserData" scope="session"/> 
<jsp:setProperty name="user" property="*"/>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>next page</title>
</head>
<body>

You entered<BR>
Name: <%= user.getUsername() %><BR>
Email: <%= user.getEmail() %><BR>
Age: <%= user.getAge() %><BR>

</body>
</html>

这给了我:

SEVERE: Servlet.service() for servlet [jsp] in context with path [/GNYSweb] threw exception [java.lang.NullPointerException] with root cause java.lang.NullPointerException at dbActionManagement.OfficerManager.getTotalPoint(OfficerManager.java:494) at dbActionManagement.UserData.getUsername(UserData.java:28) at org.apache.jsp.NextPage_jsp._jspService(NextPage_jsp.java:80) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

此外,我为此使用的 java 类是 UserData 和方法 getUserName()

public String getUsername() { 
int a = new OfficerManager().getTotalPoint("a");
return new Integer(a).toString();
}

OfficerManager 有一个默认的构造函数,getTotalPoint 是

public int getTotalPoint(String officerId){
int point = 0;
ResultSet results = null;
try {
if(DBConnection.db.isClosed()){ // problem is caused by this line
DBConnection.connect();
}
Statement sql = DBConnection.db.createStatement();
String sqlText = "select point from officers ";

sqlText += " where sicilno = '" + officerId + "'";
results = sql.executeQuery(sqlText);

} catch (SQLException e) {
e.printStackTrace();

}
if(results != null)
try {
while(results.next()){
point = (int) results.getDouble("point");

}
} catch (SQLException e) {
e.printStackTrace();
}

return point;
}

我已将 postgreSQL jdbc 驱动程序添加到我的构建路径中。我还在 Tomcat 的 lib 文件夹中包含了相同的 jdbc 驱动程序。此外,我在本地主机上使用了 Tomcat v7.0 的一个实例,它的位置是 [workspace metadata]

最佳答案

我明白这个问题,基本上是我试图访问空的 Connection 对象。我使用静态对象访问数据库,我忘记在使用前初始化它们。对此有多种解决方案,最基本的一种是在 UserData 类中编写另一个名为 startConnection() 的方法

public void startConnection(){
new DBConnection("myDBName", "myUserName", "myPassword");
}

并从jsp页面调用这个方法

...
<body>
<% user.startConnection(); %>
Name: <%= user.getUsername() %><BR>
</body>
...

这样我就可以在使用它们之前正确地初始化我的 DBConnection 类实例。感谢您的帮助。

关于java - JSP不访问数据库导致的NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7037539/

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