java-dbcp 导致oracle存在很多incative session

问题描述

dbcp 导致oracle存在很多incative session
    小弟是往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();
                        }

                    }
                }

            }
        }

解决方案

结题了,我自己已经找到了问题。就出现在

      public TempDAO() {
        init();
    }

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

这一块DBCP应该被加载到static块里,好让类在加载时候只加载一次,我原来的这种写法,是因为我在别的地方多次new TempDAO(),
其实在不断的new DBCP(),so...i'm stupid

时间: 2024-09-14 05:54:07

java-dbcp 导致oracle存在很多incative session的相关文章

【中亦安图】导致Oracle性能抖动的参数提醒(4)

第一章 技术人生系列 · 我和数据中心的故事(第四期)-导致Oracle性能抖动的参数提醒 中亦安图 | 2016-01-25 21:39 前言 不知不觉,技术人生系列·我和数据中心的故事来到了第四期.小y又和大家见面了! 当您看到业务系统压测呈现以下波浪形的tps曲线时,你会怎么下手? 小y(中亦科技)今天要和大家分享的就是这样一个业务系统压测性能问题的分析和解决过程.这个问题困扰了客户相当长一段时间,幸运的是,小y通过远程在10分钟定位到了问题的原因并帮助客户最终解决了问题.需要说明的是,在

Java 中调用oracle 的过程

oracle|过程 example 1:/* * This sample shows how to call a PL/SQL stored procedure using the SQL92 * syntax. See also the other sample PLSQL.java. */ import java.sql.*;import java.io.*; class PLSQLExample{ public static void main (String args []) throw

java 如何在一个普通类里创建session

问题描述 java 如何在一个普通类里创建session 如果不能的话,有其他方法能实现session的功能么 ,只做存取数据用 解决方案 从session的本质来看,就是一个全局的数据缓存对象,它底层实现就是Map的.所以如果你想实现一个全局的数据缓存功能,只要定义一个全局的HashMap或者HashTable对象就可以了.

每次翻墙后导致oracle连接不上

问题描述 每次翻墙后导致oracle连接不上 登录pl sql developer软件时 弹出 百度说是ip变化导致的,我的ip设置的自动获取, 即便固定了,每次翻墙后,都会变成自动获取. OracleDBConsoleoracl 服务也启动不起来. 在这中情况下,我需要怎么配置下 oracle的文件. 我用的oracle 10版本 listener.ora和tnsname.ora 都是我的本地计算机名字, 解决方案 配置设置成127.0.0.1就行了,你用的是代理吧 解决方案二: 在liste

java oracle-java连接Oracle时出错,架包什么的都导入了,哪错了啊,还得交作业呢,请大神解救

问题描述 java连接Oracle时出错,架包什么的都导入了,哪错了啊,还得交作业呢,请大神解救 public class JavaToOracle01 { public static void main(String[] args){ String strQuery="SELECT g_ID,t_ID,g_Name,g_Number FROM SCOTT.GOODS"; Connection conn; Statement stat; ResultSet rs; String gid

高可用失灵:交换机导致Oracle集群故障致机场停运

最近日本的一则数据库故障引发了全日航空(ANA)航班停运,被广泛关注. 据日本<产经新闻>3月22日报道,日本全日空航空公司(ANA)的国内航班系统22日8时20分开始发生故障,导致旅客无法办理登机手续,目前正在逐步恢复.但截至22日下午2时,已有超过120架航班停航. 今年2月24日,ANA国内航班系统就曾经发生故障,但30分种后修复,导致一部分航班晚点起飞.在2007年5月27日和2008年9月14日,也出现超过400架航班晚点或停航的故障.报道称,此次故障导致在羽田机场.大阪机场.那霸机

java代码调用oracle存储过程

原文:java代码调用oracle存储过程 一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); 2.创建CallableStatement CallableStatement statement = conn.prepareCall(sql); 3.设置参数 statement.setInt(1, id); statement.registerOu

java新手的问题,看到很多类似的,下面麻烦高手详细解释一下我下面的程序

问题描述 java新手的问题,看到很多类似的,下面麻烦高手详细解释一下我下面的程序 package cn.csdn.domain; import java.io.Serializable; public class User implements Serializable{ private int id; private String username; private String password; private int age; private String sex; public Us

osconstants-OsConstants.java类中定义了很多常量,但都是用placeholder赋值,为什么这样做

问题描述 OsConstants.java类中定义了很多常量,但都是用placeholder赋值,为什么这样做 Android OsConstants.java定义了许多常量,但是都是用placeholder来赋值的,这些常量的结果将会一样. 为什么要这样做? 解决方案 这些都是预设的,也就是考虑到以后可能会更改,或者考虑到未来可能跨平台.所以没有写死,用占位符表示.但是有时候这种东西一辈子也不会再更改了.但是因为历史原因保留了下来.