GVKun编程网logo

java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接(oracle数据库从关闭到启动的状态)

27

想了解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数据库从关闭到启动的状态)

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连接被放回到连接池中。确保您用来访问实体的EntityManagerSession在加载Blob时仍处于活动状态。

c3p0 数据库池语句关闭失败 java.sql.SQLRecoverableException:关闭的连接

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: 关闭的语句

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

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)

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)等相关知识,可以在本站进行查询。

本文标签: