Caused by: com.mysql.cj.exceptions.WrongArgumentException的一种解决方法

项目场景:

从properties文件读取信息连接数据库失败,Caused by: com.mysql.cj.exceptions.UnableToConnectException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=GMT&useUnicode=true&characterEncoding=utf8’异常


问题描述:

在mybatis中使用url导入配置出错
APP 中接收数据代码:

D:\jdk\bin\java -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:E:\软件\idea\IntelliJ IDEA 2017.3.7\lib\idea_rt.jar=5792:E:\软件\idea\IntelliJ IDEA 2017.3.7\bin" -Dfile.encoding=UTF-8 -classpath "E:\软件\idea\IntelliJ IDEA 2017.3.7\lib\idea_rt.jar;E:\软件\idea\IntelliJ IDEA 2017.3.7\plugins\junit\lib\junit-rt.jar;E:\软件\idea\IntelliJ IDEA 2017.3.7\plugins\junit\lib\junit5-rt.jar;E:\软件\idea\IdeaCode\day01_eesy_01mybatis\target\test-classes;E:\软件\idea\IdeaCode\day01_eesy_01mybatis\target\classes;F:\maven\maven_repository\org\mybatis\mybatis\3.5.3\mybatis-3.5.3.jar;F:\maven\maven_repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar;F:\maven\maven_repository\com\google\protobuf\protobuf-java\3.6.1\protobuf-java-3.6.1.jar;F:\maven\maven_repository\junit\junit\4.12\junit-4.12.jar;F:\maven\maven_repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;F:\maven\maven_repository\log4j\log4j\1.2.12\log4j-1.2.12.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.itheima.test.MybatisTest,testFindAll
2020-11-02 18:53:32,966 0      [           main] DEBUG ache.ibatis.logging.LogFactory  - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2020-11-02 18:53:33,019 53     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-11-02 18:53:33,019 53     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-11-02 18:53:33,019 53     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-11-02 18:53:33,019 53     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-11-02 18:53:33,196 230    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLNonTransientConnectionException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=GMT&useUnicode=true&characterEncoding=utf8'.
### The error may exist in com/itheima/dao/UserDao.xml
### The error may involve com.itheima.dao.UserDao.findAll
### The error occurred while executing a query
### Cause: java.sql.SQLNonTransientConnectionException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=GMT&useUnicode=true&characterEncoding=utf8'.

	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:93)
	at com.sun.proxy.$Proxy10.findAll(Unknown Source)
	at com.itheima.test.MybatisTest.testFindAll(MybatisTest.java:49)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.sql.SQLNonTransientConnectionException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=GMT&useUnicode=true&characterEncoding=utf8'.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:79)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:131)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:219)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:678)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190)
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:221)
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:216)
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:95)
	at org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:422)
	at org.apache.ibatis.datasource.pooled.PooledDataSource.getConnection(PooledDataSource.java:89)
	at org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:138)
	at org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:60)
	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:336)
	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
	... 30 more
Caused by: com.mysql.cj.exceptions.UnableToConnectException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=GMT&useUnicode=true&characterEncoding=utf8'.
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
	... 48 more
Caused by: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=GMT&useUnicode=true&characterEncoding=utf8'.
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
	at com.mysql.cj.conf.ConnectionUrlParser.processKeyValuePattern(ConnectionUrlParser.java:539)
	at com.mysql.cj.conf.ConnectionUrlParser.parseQuerySection(ConnectionUrlParser.java:519)
	at com.mysql.cj.conf.ConnectionUrlParser.getProperties(ConnectionUrlParser.java:644)
	at com.mysql.cj.conf.ConnectionUrl.collectProperties(ConnectionUrl.java:303)
	at com.mysql.cj.conf.ConnectionUrl.<init>(ConnectionUrl.java:288)
	at com.mysql.cj.conf.url.SingleConnectionUrl.<init>(SingleConnectionUrl.java:47)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
	at com.mysql.cj.util.Util.handleNewInstance(Util.java:191)
	at com.mysql.cj.util.Util.getInstance(Util.java:166)
	at com.mysql.cj.util.Util.getInstance(Util.java:173)
	at com.mysql.cj.conf.ConnectionUrl.getConnectionUrlInstance(ConnectionUrl.java:200)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:196)
	... 47 more


Process finished with exit code -1


原因分析:

是因为properties文件的内容带上了&
在xml文件中不能直接使用&,会被转义为上面的&amp ;(写一起就会被转义成&,所以空了一格),当直接把数据从xml中拿出来时,仍然保持转义状态

url=jdbc:mysql://localhost:3306/eesy_mybatis?useSSL=true&amp;serverTimezone=GMT&amp;useUnicode=true&amp;characterEncoding=utf8


解决方案:

" ; "
换成" & "即可

url=jdbc:mysql://localhost:3306/eesy_mybatis?useSSL=true&serverTimezone=GMT&useUnicode=true&characterEncoding=utf8



  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 这个错误提示是因为 MySQL 数据库连接的 URL 不正确,导致无法加载连接类。具体原因是解析 URL 失败,可能是因为 URL 格式不正确或参数设置有误。需要检查连接 URL 是否符合规范,比如是否包含正确的主机名、端口号、数据库名等信息,并且参数设置是否正确。建议参考 MySQL 官方文档或相关教程,对比确认连接 URL 设置是否正确。 ### 回答2: 这个错误信息表示在创建MySQL数据连接时出现了问题,具体原因是因为连接类无法加载,因为出现了以下底层异常:com.mysql.cj.exceptions.wrongargumentexception: malformed database url, failed to parse the main url sections。 这个错误通常是由于使用了错误的数据库URL地址导致的。在MySQL连接中,URL地址是非常重要的,它用于指定连接的主机名、数据库名称以及其他重要的信息。如果URL格式不正确,就会导致连接无法建立,从而出现错误。 解决这个问题的方法是检查MySQL连接的URL格式是否正确。正确的连接URL应该包含以下信息: - 主机名或IP地址; - 数据库名称; - 连接协议; - 端口号。 如果连接URL中有任何拼写错误、缺少部分或错误的信息,都可能导致连接失败。因此,建议在构建MySQL连接时仔细检查连接URL的格式,确保其准确无误。同时,在编程过程中,也要注意捕获和处理连接异常,以避免出现类似的问题。 ### 回答3: 该错误提示说明您在连接MySQL数据库时,传递的URL参数似乎有问题,导致无法加载连接类。错误信息中包含了一个异常,即“wrongargumentexception: malformed database url”(参数异常:数据库URL格式不正确),错误类型是基于com.mysql.cj.exceptions包的。 这个问题通常是由于您将错误的URL传递给您的代码库所致。MySQL的URL格式如下: jdbc:mysql://[host]:[port]/[database]?[configs] 其中,[host]代表MySQL服务器的主机名;[port]代表MySQL服务器正在监听的端口号(默认为3306);[database]代表您想要连接的具体数据库;[configs]是可选的连接配置项(例如:user、password等)。 当您使用错误的URL时,您的代码库便不能正确地解析这些参数。您需要仔细检查您正在使用的URL,确保它符合上述格式。同时也需要确保您的代码库可以正确地解析URL中的各个参数。 此外,还有一些其他可能导致这个错误的原因,例如MySQL驱动程序不兼容、防火墙阻止了数据库的连接、或者是数据库已关闭等。您可以通过排除这些可能性,进一步地确定这个错误的具体原因。 总之,如果您遇到了这个错误,最好先检查一下您使用的URL是否正确,然后再进行深入的排查。这样能够更快地发现问题所在,尽快解决这个错误。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值