【发布时间】:2020-03-21 17:24:53
【问题描述】:
我是 JEE 的初学者,我正在尝试从我的数据库中获取对象,但我遇到了 nullpointerexception 的错误,我试图定位系统的 nullpointerexception 的来源(我知道连接传递为 null) .out.println() 但我失败了,我忘了告诉你我有用于连接的类单例连接,我在我的函数中通过 .getconnection() 调用它,我还在项目构建中添加了一个 jdbc 驱动程序(版本 8.0.18)路径(我问这个错误是否可能是由于 jdbc 驱动程序版本引起的??),,
如果有人可以提供帮助,请提前致谢。
这是连接到数据库并将对象带到我在 PreparedStatement ps=connection.prepareStatement("req") 中告诉您的错误的函数
System.out.println("connection");
Connection connection=SingletonConnection.getConnection();
System.out.println(connection);
try {
PreparedStatement ps=connection.prepareStatement("SELECT * FROM PRODUITS WHERE DESIGNATION LIKE ?");
ps.setString(1, mc);
ResultSet rs=ps.executeQuery();
这是错误日志
HTTP Status 500 – Internal Server Error
Type Exception Report
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.NullPointerException
dao.ProduitDaoImpl.produitsParMC(ProduitDaoImpl.java:48)
web.ControleurServelet.doGet(ControleurServelet.java:49)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.
这是我的单例连接
public class SingletonConnection {
private static Connection connection;
//le block static charge la classe en mémoire lors de son appel
static{
try {
Class.forName("com.mysql.cj.jdbc.Driver");
try {
connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/db-natal","root","");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() {
return connection;
}
这是服务器日志中的堆栈
Nov 27, 2019 6:26:37 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [cs] in context with path [/essai_web] threw exception
java.lang.NullPointerException
at dao.ProduitDaoImpl.produitsParMC(ProduitDaoImpl.java:48)
at web.ControleurServelet.doGet(ControleurServelet.java:49)
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:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:444)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
这是第 48 行
public Produit update(Produit p) {
【问题讨论】:
-
你能告诉我们你的
SingletonConnection类吗? -
这是第 48 行 ::PreparedStatement ps=connection.prepareStatement("SELECT * FROM PRODUITS WHERE DESIGNATION LIKE ?");
-
在您的问题中,您说
connection是null,因为这就是打印出来的内容。这意味着SingletonConnection.getConnection()返回null,因为您将结果分配给connection。所以接下来看SingletonConnection.getConnection()! -
好的,我会添加它
-
@DanielBarbarian 我已经添加了我的单例连接,如果你可以检查一下
标签: java jakarta-ee jdbc