想了解java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于oracle数据库从
想了解java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于oracle数据库从关闭到启动的状态的相关问题,此外,我们还将为您介绍关于c3p0 数据库池语句关闭失败 java.sql.SQLRecoverableException:关闭的连接、DRUID 连接池:java.sql.SQLRecoverableException: 关闭的语句、Exception in thread “main” java.sql.SQLException: No suitable driver、idea连接mysql数据库(报错java.sql.SQLException: No suitable driver found for jdbc)的新知识。
本文目录一览:- java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接(oracle数据库从关闭到启动的状态)
- c3p0 数据库池语句关闭失败 java.sql.SQLRecoverableException:关闭的连接
- DRUID 连接池:java.sql.SQLRecoverableException: 关闭的语句
- Exception in thread “main” java.sql.SQLException: No suitable driver
- idea连接mysql数据库(报错java.sql.SQLException: No suitable driver found for jdbc)
java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接(oracle数据库从关闭到启动的状态)
我正在与@lmetrak一起工作,最后我找出了问题所在。 我们的应用程序支持Oracle和MSSQL数据库。该错误仅在我们使用Oracle时发生,因为它是由Oracle的BLOB实现引起的。
@lmetrak发布了KeystoreHelper.class的安全性。在这里,我们没有交易了。在上一步中,我们为数据库获取了Keystore实体,我们关闭了事务,并将实体传递给KeystoreHelper类。
oracle.sql.BLOB包含有关用于从数据库中获取实体的连接的信息。因此,当我们请求BinaryStream时,blob尝试连接到数据库以下载日期,因为它不是唯一的代理。它不会尝试获取开放的连接表单连接池,而是会尝试使用用于获取Keystore实体的相同连接。有时,同时关闭连接会发生错误。我不确定什么是MSSQL策略,但是BLOB的实现不包含有关连接的信息,也没有该问题。
我们的解决方案是将Keystore.keystoreData的文件类型从BLOB更改为byte []。 现在,它可以在Oracle和MSSQL上运行。
(...)
byte[] keystoreData = keystore.getKeystoreData();
/*A few checks*/
inputStream = new ByteArrayInputStream(keystore.getKeystoreData());
ByteArrayOutputStream outputStream= new ByteArrayOutputStream();
IOUtils.copy(inputStream,outputStream);
inputStream .close();
outputStream.close();
byte[] myKeystoreData = myBos.toByteArray();
inputStream = new ByteArrayInputStream(myKeystoreData);
(...)
,
最可能的原因是底层JDBC连接被放回到连接池中。确保您用来访问实体的EntityManager
或Session
在加载Blob时仍处于活动状态。
c3p0 数据库池语句关闭失败 java.sql.SQLRecoverableException:关闭的连接
如何解决c3p0 数据库池语句关闭失败 java.sql.SQLRecoverableException:关闭的连接?
我是 Java 和 c3p0 数据库池的新手。我们已经在 mulesoft 上构建了 api 并部署到了 cloudhub(vpc + vpn 配置),应用程序连接到内部数据库。
应用程序日志显示以下警告,每 12 小时(正好)关闭一次连接
16:59:32.799 07/28/2021 Worker-0 C3P0PooledConnectionPoolManager[identityToken->|41d2c93]-HelperThread-#2 WARN
Statement close Failed.
java.sql.sqlRecoverableException: Closed Connection
at oracle.jdbc.driver.PhysicalConnection.needLine(PhysicalConnection.java:3525)
at oracle.jdbc.driver.OracleStatement.cloSEOrCache(OracleStatement.java:1478)
at oracle.jdbc.driver.OracleStatement.close(OracleStatement.java:1461)
at oracle.jdbc.driver.OracleStatementWrapper.close(OracleStatementWrapper.java:122)
at com.mchange.v1.db.sql.StatementUtils.attemptClose(StatementUtils.java:53)
at com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnection(DefaultConnectionTester.java:325)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.testPooledConnection(C3P0PooledConnectionPool.java:510)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.testPooledConnection(C3P0PooledConnectionPool.java:464)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.refurbishIdleResource(C3P0PooledConnectionPool.java:436)
at com.mchange.v2.resourcepool.BasicResourcePool$asynctestIdleResourceTask.run(BasicResourcePool.java:2211)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
如果在过去几分钟内收到请求达到 12 小时,则它会失败并显示 500 错误 connection.ConnectionException: An attempt by a client to checkout a Connection has timed out
我已经配置了基于 spring 的数据源,这是我的配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.2.xsd">
<bean id="oracle-jdbcdatasource"destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@${oracle.host}:${oracle.port}/${oracle.database}"/>
<property name="user" value="${oracle.username}"/>
<property name="password" value="${oracle.password}"/>
<property name="minPoolSize" value="1"/>
<property name="maxPoolSize" value="5"/>
<property name="initialPoolSize" value="1"/>
<property name="acquireIncrement" value="1"/>
<property name="idleConnectionTestPeriod" value="300"/>
<property name="maxStatements" value="0"/>
<property name="checkoutTimeout" value="60000"/>
<property name="testConnectionOnCheckout" value="true" />
<property name="testConnectionOnCheckin" value="true" />
<property name="preferredTestQuery" value="select 1 from dual" />
<property name="maxConnectionAge" value="14400" />
<property name="maxIdleTime" value="7200" />
</bean>
</beans>
我已将 maxConnectionAge
设置为 14400(4 小时)并将 maxIdleTime
设置为 7200(2 小时),所以我没想到会看到连接关闭错误,因为它应该在 12 小时和新连接之前破坏了连接应该就位。
版本详情
- 骡运行时 - 4.3.0
- Oracle jdbc8 - 19.3.0.0
- c3p0 - 0.9.5.2
有人可以告诉我是否缺少 c3p0 池的任何配置吗?
谢谢
解决方法
我认为池配置没有任何问题。可能是VPN的重连问题,甚至是数据库本身的一些限制。
,听起来您可能正在检出连接,但没有立即将它们重新检入。如果旧连接保持检出状态,c3p0 不会过期,只有在它们被检入之后。
“客户端尝试签出连接已超时”消息表明您最终已经耗尽了连接池,没有剩余要签出的连接并且已达到 maxPoolSize
。
当您的应用签出 Connections 时,它应该使用 try-with-resources 构造以确保 Connection 在使用后立即签入。
DRUID 连接池:java.sql.SQLRecoverableException: 关闭的语句
1、升级 1.0.29
2、关闭 PSCache.
<property name="poolPreparedStatements" value="false" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="-1" />
==================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=" http://www.springframework.org/schema/beans"
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:batch=" http://www.springframework.org/schema/batch"
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="propertyConfigure"
>
<property name="locations">
<list>
<value>./conf/application.properties</value>
</list>
</property>
</bean>
<bean id="dataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="10" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="10000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<!-- 这里建议配置为 TRUE,防止取到的连接不可用 -->
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="false" />
<!-- 打开 PSCache,并且指定每个连接上 PSCache 的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20" />
<!-- 这里配置提交方式,默认就是 TRUE,可以不用配置 -->
<property name="defaultAutoCommit" value="true" />
<!-- 验证连接有效与否的 SQL,不同的数据配置不同 -->
<property name="validationQuery" value="select 1 " />
<property name="filters" value="stat" />
<property name="proxyFilters">
<list>
<ref bean="logFilter" />
</list>
</property>
</bean>
<bean id="logFilter">
<property name="statementExecutableSqlLogEnable" value="false" />
</bean>
</beans>
Exception in thread “main” java.sql.SQLException: No suitable driver
问题背景:通过Spark SQL的jdbc去读取Oracle数据做测试,在本地的idea中没有报任务错误。但是打包到集群的时候报:
Exception in thread “main” java.sql.SQLException: No suitable driver
测试代码:
def read(spark: SparkSession): DataFrame = {
val jdbcDF = spark.read
.format("jdbc")
.option("url", "jdbc:oracle:thin:@ip:1521:orcl")
.option("dbtable", "SPARTA.BAYONET_VEHICLEPASS10")
.option("user", "SPARTA")
.option("password", "hik12345")
.load()
jdbcDF
}
在本地测试通过,服务器会报如上截图的错误。最后通过排查发现是少了一句要制定driver的类型
.option("driver", "oracle.jdbc.driver.OracleDriver")
idea连接mysql数据库(报错java.sql.SQLException: No suitable driver found for jdbc)
不是maven版
1.把你电脑安装的数据库对应的jar包复制粘贴到项目名那里。
2.右击,add as library,确定
3.新建class,代码如下
import java.sql.*;
public class jdbcdeno1 {
public static void main(String[] args){
//DriverManager数据库链接
// try(Connection connection= DriverManager.getConnection("链接url+/数据库名","用户名","密码");
try(Connection connection= DriverManager.getConnection
("jdbc:MysqL://localhost:3306/ooo","root","123456");
//创建一个执行sql的statement对象
Statement statement =connection.createStatement())
{
//执行sql
// ResultSet set=statement.executeQuery("select * from 表名");
ResultSet set=statement.executeQuery("select * from dno");
//看结果
while(set.next()) {
System.out.println(set.getString(1));
}
} catch (sqlException throwables) {
throwables.printstacktrace();
}
}
}
运行,如果报错java.sql.sqlException: No suitable driver found for jdbc
先看url对不,一般都是jdbc:MysqL://localhost:3306,端口要是改了写自己的端口。再看看数据库开没。
都没问题打开你下载的jdk文件位置(如果没改在C:\Program Files\Java),找到jre-lib-ext,看看有mysql-connector-java-5.1.26-bin.jar(就是第一步粘的那个,不一定是这个名)没有粘过来。
重启项目。运行完事!
今天关于java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接和oracle数据库从关闭到启动的状态的分享就到这里,希望大家有所收获,若想了解更多关于c3p0 数据库池语句关闭失败 java.sql.SQLRecoverableException:关闭的连接、DRUID 连接池:java.sql.SQLRecoverableException: 关闭的语句、Exception in thread “main” java.sql.SQLException: No suitable driver、idea连接mysql数据库(报错java.sql.SQLException: No suitable driver found for jdbc)等相关知识,可以在本站进行查询。
本文标签: