Java JDBC驱动程序的问题&;公猫

Java JDBC驱动程序的问题&;公猫,java,mysql,rest,servlets,Java,Mysql,Rest,Servlets,尝试从servlet设置DB连接时遇到一些问题 我有下面的类来处理servlet中的DB连接,但是我一直得到class.forName()的NullPointerException DB Util类: public class Database { private static Connection connection = null; /** * * @return */ public static Connection getCon

尝试从servlet设置DB连接时遇到一些问题

我有下面的类来处理servlet中的DB连接,但是我一直得到
class.forName()
的NullPointerException

DB Util类:

public class Database {

    private static Connection connection = null;

    /**
     * 
     * @return
     */
    public static Connection getConnection(){
        if(connection!=null){
            return connection;
        } else {
            try {
                Properties db_properties = new Properties();
                InputStream inStream = Database.class.getClassLoader().getResourceAsStream("/db.properties");
                db_properties.load(inStream);
                //String dbDriver = db_properties.getProperty("driver").trim();
                String url = db_properties.getProperty("url").trim();
                String dbUser = db_properties.getProperty("user").trim();
                String dbPass = db_properties.getProperty("pass").trim();
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection(url,dbUser,dbPass);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return connection;
    }
}
使用以下属性文件(我尝试硬编码驱动程序,但仍然得到相同的错误!):

我得到以下堆栈跟踪:

SEVERE: Allocate exception for servlet BuddyController
java.lang.NullPointerException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:171)
    at com.mathanv.gb.util.Database.getConnection(Database.java:35)
    at com.mathanv.gb.dao.BuddyDao.<init>(BuddyDao.java:35)
    at com.mathanv.gb.controller.BuddyController.<init>(BuddyController.java:29)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:357)
    at java.lang.Class.newInstance(Class.java:310)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:138)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1137)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)
严重:为servlet BuddyController分配异常
java.lang.NullPointerException
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:171)
位于com.mathanv.gb.util.Database.getConnection(Database.java:35)
位于com.mathanv.gb.dao.BuddyDao(BuddyDao.java:35)
在com.mathanv.gb.controller.BuddyController上。(BuddyController.java:29)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于java.lang.Class.newInstance0(Class.java:357)
位于java.lang.Class.newInstance(Class.java:310)
位于org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:138)
位于org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1137)
位于org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
位于org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
运行(Thread.java:680)
我正在尝试从Android客户端发送post请求。HTTPpost请求似乎有效!但是获得连接给了我上述的例外!救命啊

以下是我的Servlet布局:


如果您需要更多信息,请告诉我

如果在更多位置有mysql驱动程序,就会发生这种情况


尝试查找其他位置。或从lib文件夹中删除i。如果是如我所说的,那么问题应该得到解决。

获得该异常的唯一方法是将
null
传递给Class.forName(),或者可能是使用损坏的JVM。您显示的代码无法引发该异常。仔细检查你的结果。在最坏的情况下,您应该得到一个
ClassNotFoundException
。可能您已经更新了代码,但还没有编译和重新部署它,因此您仍然可以看到旧代码在服务器上运行的结果。

立即删除代码,并立即在Tomcat中使用
数据源。您的代码远不是高质量的。

您确定在代码中硬编码驱动程序名称时,也会出现相同的错误吗。
将null作为参数传递时,Class.forName()引发null指针异常。我认为在第一种情况下,属性文件没有加载,驱动程序名返回null。

在多个位置安装驱动程序jar不会给您带来NPE。您可能无法获得您认为获得的驱动程序版本。抱歉,对于多个驱动程序jar,也不会出现这种情况。如果司机完全不在职业道路上,我也会这么说,但似乎有人在说相反的话。公认的答案是有两个类路径,并且错误地使用了错误的一个,而不是同一个类路径上的两个jar副本。问题是服务器没有更新我的更改。必须通过清理项目、终止服务器、重新启动以及重新启动android仿真器来确保。谢谢你,伙计!是的,在我的情况下,我也需要做一个maven项目更新,在某个地方一些配置被破坏了
SEVERE: Allocate exception for servlet BuddyController
java.lang.NullPointerException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:171)
    at com.mathanv.gb.util.Database.getConnection(Database.java:35)
    at com.mathanv.gb.dao.BuddyDao.<init>(BuddyDao.java:35)
    at com.mathanv.gb.controller.BuddyController.<init>(BuddyController.java:29)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:357)
    at java.lang.Class.newInstance(Class.java:310)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:138)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1137)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)