相关疑难解决方法(0)

java.sql.SQLException: - ORA-01000:超出最大打开游标数

我收到了ORA-01000 SQL异常.所以我有一些与之相关的问题.

  1. 最大打开游标是否与JDBC连接数完全相关,或者它们是否与我们为单个连接创建的语句和结果集对象相关?(我们正在使用连接池)
  2. 有没有办法配置数据库中的语句/结果集对象的数量(如连接)?
  3. 是否建议在单线程环境中使用实例变量statement/resultset对象而不是方法local statement/resultset对象?
  4. 在循环中执行预准备语句会导致此问题吗?(当然,我本可以使用sqlBatch)注意:一旦循环结束,pStmt就会关闭.

    { //method try starts  
      String sql = "INSERT into TblName (col1, col2) VALUES(?, ?)";
      pStmt = obj.getConnection().prepareStatement(sql);
      pStmt.setLong(1, subscriberID);
      for (String language : additionalLangs) {
        pStmt.setInt(2, Integer.parseInt(language));
        pStmt.execute();
      }
    } //method/try ends
    
    { //finally starts
       pStmt.close()
    } //finally ends 
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果在单个连接对象上多次调用conn.createStatement()和conn.prepareStatement(sql)会发生什么?

Edit1: 6.使用Weak/Soft引用语句对象是否有助于防止泄漏?

Edit2: 1.有什么办法,我可以在项目中找到所有缺少的"statement.close()"吗?我知道这不是内存泄漏.但我需要找一个符合垃圾收集条件的语句引用(不执行close())?有什么工具可用?或者我必须手动分析它?

请帮我理解.

在Oracle DB中查找已打开的用户名-VELU的游标

转到ORALCE机器并以sysdba启动sqlplus.

[oracle@db01 ~]$ sqlplus / as sysdba 
Run Code Online (Sandbox Code Playgroud)

然后跑

SELECT   A.VALUE,
    S.USERNAME,
    S.SID,
    S.SERIAL#
  FROM V$SESSTAT A,
    V$STATNAME B,
    V$SESSION S
  WHERE A.STATISTIC# = B.STATISTIC#
    AND …
Run Code Online (Sandbox Code Playgroud)

java jdbc

110
推荐指数
3
解决办法
31万
查看次数

与MySql的连接正在自动中止.如何正确配置Connector/J?

我从错误消息中读到了这个建议:

您应该考虑在应用程序中使用之前过期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用Connector/J连接属性"autoReconnect = true"来避免此问题.

我正在使用Spring和JPA.我应该在哪里配置Connector/J?(在弹簧配置中persistence.xml,或在entityManagerFactory弹簧配置中,或在dateSource其他地方?)

java mysql spring jpa connection-timeout

48
推荐指数
2
解决办法
6万
查看次数

Spring JDBC连接池的最佳实践

我有一个基本的Spring JDBC应用程序,它具有非常基本的配置:

<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
   <property name="url" value="jdbc:oracle:thin:@1.1.1.1:1521:XXX"/>
   <property name="username" value="username"/>
   <property name="password" value="password"/>
</bean>

<bean id="dbThing" class="com.DbThing">
   <property name="dataSource" ref="myDataSource"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我想介绍一个连接池,并在阅读了几个线程后,我对使用哪个池库感到有点困惑.

似乎在SO上有更多学分的图书馆是CP30DBCP.由于我使用的是Oracle,我还可以使用驱动程序提供的池数据源.我知道有更多的库可用 - 例如新的Apache Tomcat 7池库.

有没有我应该避免的图书馆?

我应该在给定的库中使用任何推荐的配置吗?

你想分享的任何"战争故事"?

java spring connection-pooling c3p0 apache-commons-dbcp

38
推荐指数
4
解决办法
8万
查看次数

使用C3P0的JDBC连接池

以下是我的帮助类获取数据库连接:

我已经使用了这里描述的C3P0连接池.

public class DBConnection {

    private static DataSource dataSource;
    private static final String DRIVER_NAME;
    private static final String URL;
    private static final String UNAME;
    private static final String PWD;

    static {

        final ResourceBundle config = ResourceBundle
                .getBundle("props.database");
        DRIVER_NAME = config.getString("driverName");
        URL = config.getString("url");
        UNAME = config.getString("uname");
        PWD = config.getString("pwd");

        dataSource = setupDataSource();
    }

    public static Connection getOracleConnection() throws SQLException {
        return dataSource.getConnection();
    }

    private static DataSource setupDataSource() {
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        try {
            cpds.setDriverClass(DRIVER_NAME);
        } …
Run Code Online (Sandbox Code Playgroud)

java database database-connection connection-pooling c3p0

30
推荐指数
3
解决办法
7万
查看次数

在Tomcat上部署的DBCP中的死锁问题

我在Spring配置中使用DBCP数据源(使用默认配置)来管理我与数据库的连接,并且当客户端数量增加时,我遇到了死锁状态.

我发现在我使用的DBCP 1.2.1中存在死锁问题,应该在1.4中解决.所以我升级到1.4,但问题仍然存在.

在线程转储中,有许多线程被阻塞,顶部有以下堆栈跟踪:

   java.lang.Thread.State: WAITING on org.apache.commons.pool.impl.GenericObjectPool$Latch@b6b09e
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:200)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:261)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:631)
Run Code Online (Sandbox Code Playgroud)

欢迎任何建议!

java spring tomcat deadlock apache-commons-dbcp

17
推荐指数
1
解决办法
1万
查看次数

快速可靠的bonecp连接池替代方案

我在我的Java项目中使用BoneCP.但是,遗憾的是,我发现数据库发生故障后该池无法恢复.我不是唯一一个有这种问题的人(如果你想要看官方论坛).由于我(和许多其他人)从未在bonecp论坛上得到答案,似乎不再支持这个项目,我的问题不太可能得到解决.

因此,我正在寻找一个替代的主动开发和支持的连接池库,它能够正确处理数据库中断,并在数据库再次可用时立即恢复.

java connection-pooling jdbc bonecp

15
推荐指数
4
解决办法
8341
查看次数

连接池或数据源?我应该把它放在哪个JNDI?

在JNDI级别或Webapp级别连接池更有意义吗?例如,我可以简单地在javax.sql.DataSource创建:

<Context antiJARLocking="true">
  <Resource name="jdbc/myDataSource" 
    auth="Container"
    type="javax.sql.DataSource" 
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost/myDataSource" user="user" password="password" />
</Context>
Run Code Online (Sandbox Code Playgroud)

然后在Spring中配置池:

<bean id="myDataSource" class="com.mchange.v2.c3p0.DataSources"
  factory-method="pooledDataSource">
  <constructor-arg>
    <jee:jndi-lookup jndi-name="java:comp/env/jdbc/myDataSource" />
  </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

或者,我可以直接在JNDI本身配置池:

<Resource name="jdbc/myDataSource" 
  auth="Container"
  factory="org.apache.naming.factory.BeanFactory"
  type="com.mchange.v2.c3p0.ComboPooledDataSource" 
  driverClassName="com.mysql.jdbc.Driver"
  jdbcUrl="jdbc:mysql://localhost/myDataSource" 
  user="user" password="password"
  minPoolSize="3" 
  maxPoolSize="15" 
  maxIdleTime="5000"
  idleConnectionTestPeriod="300" 
  acquireIncrement="3" />
Run Code Online (Sandbox Code Playgroud)

离开这个春天:

<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,myDataSource spring bean都是一个c3p0连接池数据源,但哪一个更好?我认为在JNDI中使用池是最有意义的,但缺点是你必须将c3p0 lib推送到servlet容器级别,这可能会导致与现有servlet冲突,如果它们当前使用不同的版本.但是,将它放在JNDI中意味着您的应用程序根本不必担心池化.你们都在想什么?

java tomcat jndi datasource connection-pooling

13
推荐指数
1
解决办法
3万
查看次数

Tomcat JDBC连接池VS c3p0连接池

我最近遇到了这个连接池实现.

http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

我觉得很有意思.

有没有人试过这个?我认为它看起来很棒,除了它不支持自动重试和语句缓存,如c3p0.

有没有人知道它与c3p0相比如何?

直到现在我使用了c3p0,但我发现它在多线程环境中的连接处理存在问题.与应用程序线程数相比,它打开了太多连接.

谢谢.

java connection tomcat connection-pooling c3p0

12
推荐指数
1
解决办法
1万
查看次数

如何使用Java JDBC连接池?

我想使用JDBC连接池.最重要的因素是它易于使用且无错误.什么适合我?

java connection-pooling jdbc

11
推荐指数
3
解决办法
6181
查看次数

你如何设置连接池?

设置游泳池的最佳方法是: -

  1. 你什么时候建立联系?
  2. 你什么时候关闭连接,你会关闭它们吗?
  3. 你测试连接是否仍然很好.何时以及如何?
  4. 你怎么知道最大连接数的好数字?
  5. 您有什么样的监控来确保池的用户表现良好?你能阻止一段不好的代码取出所有东西吗?
  6. 您是否已编写自己的池或使用第三方库?

我认为这是一个不可知的问题,但欢迎对特定数据库/语言的"特征"发表评论.例如,在某些数据库上连接可能比其他数据库更慢或更昂贵.

为了澄清,我不打算从头开始编写池,这个问题更多的是关于如何配置实现池的现有库.

rdbms connection-pooling

10
推荐指数
1
解决办法
2290
查看次数