【问题标题】:how to resolve the NullPointerException in JEE? [duplicate]如何解决 JEE 中的 NullPointerException? [复制]
【发布时间】: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 ?");
  • 在您的问题中,您说connectionnull,因为这就是打印出来的内容。这意味着SingletonConnection.getConnection() 返回null,因为您将结果分配给connection。所以接下来看SingletonConnection.getConnection()
  • 好的,我会添加它
  • @DanielBarbarian 我已经添加了我的单例连接,如果你可以检查一下

标签: java jakarta-ee jdbc


【解决方案1】:

@marouu 我觉得NullPointerException不是Connection引起的,可能是ProduitDaoImpl,这个类里加@Service吗

【讨论】:

    【解决方案2】:

    你是否将mysql-connector-java添加到项目构建路径

    【讨论】:

    • 是的,我加了,会不会是版本问题???
    • @marouu 我认为版本不会导致 NullPointerException。数据库没有密码?
    • 不,它没有密码,,,也关于singleton_connection,我认为它是正确的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2014-01-28
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2018-01-18
    相关资源
    最近更新 更多