• java.sql.SQLException: Access denied for user 和org.apache.commons.dbcp.SQLNestedException


    今天刚学习连接数据池,可是不管用DBCP还是Druid,连接数据库一运行代码就出现以下令人头疼的异常(还有一大堆,这两段是节选)

    create connection error, url: jdbc:mysql://localhost:3306/jdbc_db?rewriteBatchedStatements=true
    java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:875)
    	at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1712)
    	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1228)
    	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
    	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
    	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
    	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
    	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    	at sun.reflect.GeneratedConstructorAccessor3.newInstance(Unknown Source)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
    	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
    	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1375)
    	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1431)
    	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1888)
    
    org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user ''@'localhost' (using password: YES))
    	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
    	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
    	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    	at com.bean.jdbc.util.JDBCUtil.getConn(JDBCUtil.java:41)
    	at com.bean.jdbc.dao.impl.StudentDaoImpl.get(StudentDaoImpl.java:94)
    	at com.bean.jdbc.test.StudentTest.get(StudentTest.java:47)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:606)
    	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    

    后来仔细检查,发现是properties文件配置错误了,我原来的配置文件如下:错误的配置文件

    名字是不规范的,于是我把前面的键给改规范了,如下:正确的配置

    当我再次单元测试的时候,什么错误都没有,瞬间舒服了~
    看来数据库连接池真的需要用心对待,稍微一点小错误和不规范都会引起很大的异常,好好加油~

    单元测试

    爽不爽~哈哈!!

    对于Druid来说,配置需要专门的格式,详情参考:https://github.com/alibaba/druid/wiki/DruidDataSource配置属性列表

    部分内容如下:
    Druid

  • 相关阅读:
    打开Fiddle,提示“Machine-wide Progress Telerik Fiddler installation has been found at ...Please, use that one or uninstall it ...”
    Type Target runtime Apache Tomcat v8.0 is not defined.
    Loadrunner的安装注意事项
    11.java并发编程的艺术-java并发编程实践
    10.java并发编程的艺术-Executor框架
    9.java并发编程的艺术-java中的线程池
    8.java并发编程的艺术-java中的并发工具类
    Java并发编程的艺术-java中的13个原子操作类
    6.java并发容器和框架——Fork/Join框架
    6.java并发容器和框架——Java中的阻塞队列
  • 原文地址:https://www.cnblogs.com/taobean/p/12364286.html
Copyright © 2020-2023  润新知