简体   繁体   English

Null 指针异常。 我的连接 object 如何指向 null

[英]Null pointer exception. How my connection object is pointing to null

The stacktrace堆栈跟踪

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1952)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1795)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at Store.<init>(Store.java:12)
    at RegisterServlet.doGet(RegisterServlet.java:38)
    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:492)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
    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:452)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Sep 01, 2020 9:06:08 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [RegisterServlet] in context with path [/Registration] threw exception
java.lang.NullPointerException
    at Store.insertuser(Store.java:31)
    at RegisterServlet.doGet(RegisterServlet.java:40)
    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:492)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
    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:452)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;


public class Store {
    Connection connection;

    Store() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            String username = "sa";
            String password = "123456abcd";
            String url = "jdbc:sqlserver://localhost;databaseName=Register";



            connection = DriverManager.getConnection(url, username, password);

        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    public boolean insertuser(String string1, String string2, String string3, String string4, String string5) throws SQLException{
        
        String sql = "insert into dbo.Usertable values(?,?,?,?,?)";
        
        PreparedStatement pstmt = connection.prepareStatement(sql);//this is the place where connection is null

        pstmt.setString(1, string1);
        pstmt.setString(2, string2);
        pstmt.setString(3, string3);
        pstmt.setString(4, string4);
        pstmt.setString(5, string5);
        int i = pstmt.executeUpdate();
        if (i > 0) {
            return true;
        }
        
        return false;
    
    
        
    }

    

}



i have a class store .我有一家 class商店 I connect jdbc in init.我在 init 中连接 jdbc。 I insert values in usertable in a method insertuser .我使用 insertuser 方法在usertable中插入值。 My connection object is pointing to null. My usertable has five varchar values in a database called Register .我的连接 object 指向 null。我的用户表在名为Register的数据库中有五个 varchar 值。 Why my connection object is pointing to null.I have jdbc jar connected to my classpath.为什么我的连接 object 指向 null。我有 jdbc jar 连接到我的类路径。

If the Store constructor encounters any exception, it will print a stacktrace and return a partially constructed Store object with a null in the connection field.如果Store构造函数遇到任何异常,它将打印堆栈跟踪并返回部分构造的Store object, connection字段中为null

That would explain what you are seeing.那可以解释你所看到的。 But we can't tell you the cause of the exception you are catching without seeing the (complete) stacktrace.但是我们不能在没有看到(完整的)堆栈跟踪的情况下告诉您您正在捕获的异常的原因。 Typical explanations for this kind of thing include:对这种事情的典型解释包括:

  • Database driver JAR not the classpath (correctly)数据库驱动程序 JAR 不是类路径(正确)
  • Incorrect database driver JAR数据库驱动程序不正确 JAR
  • Incorrect database credentials数据库凭据不正确
  • Incorrect database host or port information数据库主机或端口信息不正确
  • Network problems网络问题

Things you could fix:您可以解决的问题:

  • As commenters pointed out, the exception handling in your constructor is broken.正如评论者指出的那样,构造函数中的异常处理被破坏了。 If you get an exception while setting up the connection, the constructor should terminate with an exception.如果在建立连接时遇到异常,构造函数应该以异常终止。 The caller needs to deal with it, or allow it to propagate.调用者需要处理它,或者允许它传播。
  • If you use DriverManager.getConnection you shouldn't need to use Class.forName to load the JDBC driver.如果您使用DriverManager.getConnection ,则不需要使用Class.forName来加载 JDBC 驱动程序。 The DriverManager infrastructure will find the driver for itself, based on what the jdbc URL says. DriverManager基础结构将根据 jdbc URL 的内容为自己找到驱动程序。

You need to add the jar file containing the class com.microsoft.sqlserver.jdbc.SQLServerDriver to your war file's WEB-INF/lib folder.您需要将包含 class com.microsoft.sqlserver.jdbc.SQLServerDriver 的 jar 文件添加到 war 文件的 WEB-INF/lib 文件夹中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM