### Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource

分析问题:

因为是缺少jdbc的包

解决问题:

 

在maven工程的pom.xml加以下的代码:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

 

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: com.mysql.cj.jdbc.Driver ### The error may exist in mapper/EmpDao.xml ### The error may involve org.yxt.Dao.empDao.empList ### The error occurred while executing a query ### Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: com.mysql.cj.jdbc.Driver 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:57) at com.sun.proxy.$Proxy0.empList(Unknown Source) at Test.main(Test.java:29) Caused by: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: com.mysql.cj.jdbc.Driver at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.initializeDriver(UnpooledDataSource.java:241) at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:220) 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.openC
最新发布
03-26
### 解决Java中设置UnpooledDataSource驱动时出现的SQLException错误 当遇到`java.sql.SQLException`错误,特别是在尝试配置MyBatis中的`UnpooledDataSource`并指定JDBC驱动程序时,通常是因为未能正确加载数据库驱动类或存在连接池参数不当等问题。 对于特定于Oracle JDBC驱动抛出异常的情况[^1]: ```plaintext at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) ``` 这表明在执行SQL操作期间遇到了问题。然而,在讨论关于`UnpooledDataSource`配置失败的情况下,更可能的原因在于未成功初始化数据源对象或是提供的URL、用户名密码不匹配等基础性配置失误。 针对`ORA-01000`最大打开游标的错误提示[^2]: ```plaintext ORA-01000, the maximum-open-cursors error... ``` 此情况并非直接由`UnpooledDataSource`引起,而是由于应用程序试图开启过多的结果集(ResultSet),超出了数据库实例所允许的最大游标数限制。尽管如此,如果频繁创建和关闭连接而没有妥善管理资源释放,则可能导致此类问题的发生。 为了有效处理上述提到的各种潜在原因造成的`SQLException`,可以采取如下措施来调整代码逻辑以及优化环境配置: #### 修正Driver Class Name 和 URL 参数 确保使用的driverClassName属性指向正确的Oracle JDBC驱动名称,并验证connectionProperties中的url是否准确无误地指定了目标数据库的位置和服务名/端口信息。 ```xml <dataSource type="UNPOOLED"> <property name="driver" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> </dataSource> ``` #### 增加可用游标数量 通过修改Oracle数据库侧的相关参数增加可同时保持开放状态下的游标数目上限,从而减少因超出限额而导致的操作失败风险。可以在会话级别临时更改该设定,也可以考虑永久性的系统级变更以适应更高并发需求的应用场景。 ```sql ALTER SYSTEM SET OPEN_CURSORS=300 SCOPE=BOTH; -- 或者仅限当前session生效的方式 ALTER SESSION SET OPEN_CURSORS=300; ``` #### 结果集及时关闭 确保每次查询结束后都显式调用了`close()`方法去回收不再需要的对象引用,防止内存泄漏的同时也避免了不必要的资源占用影响后续请求性能表现。 ```java try (Connection conn = dataSource.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) { } catch (SQLException e) { logger.error("Database operation failed", e); } ``` 以上策略能够帮助缓解乃至彻底消除与`UnpooledDataSource`关联起来发生的各种形式的`SQLException`异常状况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值