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

开发者社区> 问答> 正文

dbcp 导致oracle存在很多incative session

2016-06-13 11:36:52 2635 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

回答

plsql查看存储过程目录报错ora-03114 未连接到数据库(oracle11G) ?报错

2020-06-24 14:27:10 859浏览量 回答数 1

1

回答

mvn install命令时,一直报错:不兼容的类型 [ERROR] 找到: j?报错

2020-06-09 15:43:05 521浏览量 回答数 1

1

回答

maven 导入oracle14.jar报错?报错

2020-06-09 14:25:29 292浏览量 回答数 1

1

回答

dbcp数据源连接oracle执行语句报连接超时?报错

2020-06-07 22:07:50 511浏览量 回答数 1

1

回答

如何将一个 mysql 风格 sql 脚本转换为 oracle 导入的 sql 脚本-mysql报错

2020-05-31 11:51:48 359浏览量 回答数 1

1

回答

Oracle和Mysql的区别?

2019-11-13 16:34:19 480浏览量 回答数 1

2

回答

MySQL的前缀索引及Oracle的类似实现

2018-01-31 12:08:56 4505浏览量 回答数 2

0

回答

新建hive表连接oss报错:No FileSystem for scheme: oss

2017-11-22 19:48:06 5812浏览量 回答数 0

2

回答

oracle的存储过程和pl/sql有什么区别

2016-07-04 16:10:38 2163浏览量 回答数 2

1

回答

oracle sql语句 求sql语句

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