dbcp 导致oracle存在很多incative session-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

dbcp 导致oracle存在很多incative session

2016-06-13 11:36:52 2681 1

往oracle数据库里插入数据,Connection 是从DBCP里拿到的,在插入后对Connection和PreparedStament都有作finally{.close()}处理,但是发现oracle中v$session 存在很多inactive session。是我没正确关闭吗?

 public class TempDAO {

    private Connection con;
    private PreparedStatement ptst;

    public TempDAO() {
        init();
    }

    private void init() {
        DBCP dbcp = new DBCP();
        con = dbcp.getCon();
    }

    public void insertTempa(List<Tempa> tempaLists) {

        String sql = "insert into gps_gsp_test(gps_time,temp1,temp2,vehicle_number,entry_time) values(?,?,?,?,?)";
        try {
            /**
             * 这里不能con.prepareStatement(sqlStr,Statement.RETURN_GENERATED_KEYS)赋值
             * Statement.RETURN_GENERATED_KEYS是获取最大主键值,若数据库表没有主键,批量处理会有问题!
             */
            ptst = con.prepareStatement(sql);
            for(Tempa temp : tempaLists) {
                ptst.setTimestamp(1,new Timestamp(temp.getCollectTime().getTime()));
                ptst.setDouble(2,temp.getTemp1());
                ptst.setDouble(3,temp.getTemp2());
                ptst.setString(4,temp.getCarNo());
                ptst.setTimestamp(5,new Timestamp(temp.getEntryTime().getTime()));
                ptst.addBatch();
               // ptst.executeUpdate();
            }
            ptst.executeBatch();
            con.commit();
            ptst.clearBatch();
            System.out.println("数据插入成功!");
        } catch (SQLException e) {
            e.printStackTrace();
            try {
                con.rollback();
                System.out.println("数据插入失败!");
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }  finally{
            if(ptst != null){
                try {
                    ptst.close();
                    ptst = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    if(con != null){
                        try {
                            con.close();
                            con = null;
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }

                    }
                }

            }
        }
取消 提交回答
全部回答(1)
  • 游客bgx5ifdnbokuq
    2019-07-17 19:35:30

    看您的逻辑, TempDAO 这个类应该是个单例类,不然DBCP本身就没有意义了.
    如果是单例的类,那么在并发场景下您的代码就有严重的问题.

    如果不是单例的类,那么DBCP本身没有关闭,会出现很多无效的连接.

    0 0
相关问答

1

回答

咨询一个oracle cdc的问题,如果只要同步某几张表也还要开启数据库级别的最小补充日志么?

2022-06-27 11:39:02 100浏览量 回答数 1

1

回答

数仓当中Oracle数据库位图索引是什么意思?

2021-12-12 17:27:23 402浏览量 回答数 1

1

回答

数仓当中Oracle数据库HASH索引是什么意思?

2021-12-12 17:30:16 424浏览量 回答数 1

1

回答

数仓当中Oracle数据库b-tree索引是什么意思?

2021-12-12 17:26:37 404浏览量 回答数 1

1

回答

Node如何连接SQLServer和Oracle数据库? 400 请求报错 

2020-05-30 22:58:26 325浏览量 回答数 1

1

回答

ACE没有发现支持oracle数据库

2015-07-29 13:17:32 4575浏览量 回答数 1

1

回答

RDS数据库支持oracle吗?

2015-06-30 09:58:55 4453浏览量 回答数 1

7

回答

使用java环境,oracle数据库,阿里云服务器支持吗?

2014-07-09 14:02:46 20769浏览量 回答数 7

2

回答

云空间能自己安装tomcatjdk及oracle数据库吗

2014-05-18 14:01:21 7908浏览量 回答数 2

8

回答

阿里云主机支持oracle甲骨文数据库吗?

2013-02-17 20:54:50 11691浏览量 回答数 8
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载