楼主先在try里面打断点看看,有没进去正常的try代码

解决方案 »

  1.   

    应该还没走完吧,估计走到 try 里面的方法了。
    你catch 里面直接打印。
    你不用debug 直接走看看。
      

  2.   


    代码就是这样,这个函数在直接在mian()里调用 
      单步调试F6, 在  con = DataSource.getConnection(); 就不知道跳哪里去(超过在连接池个数时)
     其他代码要是出错就会进catch去!public static  Boolean  test_c3p0_1()
    {
    Connection  con = null;
    Statement stmt =null;
    try

    ComboPooledDataSource DataSource = new ComboPooledDataSource("myApp");

    for(int i = 0;i < 150;i++)
    {
         con = DataSource.getConnection();
    } }catch(Exception  e)
    {
      e.printStackTrace();
    }

    finally
    {
    // 关闭连接
    try {
    stmt.close();
    con.close();// 关闭数据库连接
    } catch (Exception e) {
    // TODO Auto-generated catch block
      e.printStackTrace();
    }// 关闭命令对象连接

    }

    return true;
    }
      

  3.   

    DataSource.getConnection();当你连接池初始化的连接数不够的时候,就要重新创建连接了这个是需要一定时间的。F6继续啊如果报错了就会进catch的,没进去就没报错
      

  4.   

    唉! 知道为什么了!
    原来 C3P0 有这么样的参数,
    <!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
    SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->
    <property name="checkoutTimeout">100</property>未配置,结果默认为 0,就直接在 getConnection()里无限等待!
    增加这个配置, 现在好了!
    多谢各位 !
      

  5.   

    看程序是否结束执行了?
    一般finally没有执行到,只有一种可能了,JVM已经退出执行了
      

  6.   

    c3p0 是异步处理的,
    也就是说,楼主说的那个SQL异常,不是Caller线程执行时产生的,而是C3p0内部的线程在处理时产生的。
    不是当前线程产生的异常,当然捕获不了了。