Java调用存储过程,随着按钮点击增多,调用存储过程也增多,会出现超时问题

刚开始代码是这样的直接通过jpa连接,刚开始点击调用存储过程的按钮,没啥问题,等点击多了就会没反应:日志报数据库连接超时:

public String execute(Entity entity) {
  
  Session session = (Session) this.getJpa().getManager().getDelegate();
  SessionFactoryImpl sessionFactory = (SessionFactoryImpl) session.getSessionFactory();
  Connection conn = null;
  String result = null;
  try {
   conn = sessionFactory.getConnectionProvider().getConnection();
   CallableStatement call = conn.prepareCall("{call SP_FORMER_BMP_INFO_AUDIT(?,?,?,?,?,?,?,?,?,?,?,?)}");
   call.setString(1, entity.getParam1());
   call.setString(2, entity.getParam2());
   call.setString(3, entity.getParam3());
   call.setString(4, entity.getParam4());
   call.setString(5, entity.getParam5());
   call.setString(6, entity.getParam6());
   call.setString(7, entity.getParam7());
   call.setString(8, entity.getParam8());
   call.setString(9, entity.getParam9());
   call.setString(10, entity.getParam10());
   call.setString(11, entity.getParam11());
   call.registerOutParameter(12, Types.VARCHAR);
   call.execute();

result = call.getString(12);
   System.out.println("参数:"+entity.getParam1()+";"+entity.getParam2()+";"+entity.getParam3()+";"
     +entity.getParam4()+";"+entity.getParam5()+";"+entity.getParam6()+";"
     +entity.getParam7()+":"+entity.getParam8()+";"+entity.getParam9()+";"
     +entity.getParam10()+";"+entity.getParam11());
   System.out.println("老平台出、入金存储过程的执行结果是:"+result);
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   if (conn != null) {
    try {
     conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }
  
  return result;
 }

--后来增加判断:若连接为空,则重新通过jdbc连接,暂时未出现连接超时问题

public String execute(Entity entity) {
  
  Session session = (Session) this.getJpa().getManager().getDelegate();
  SessionFactoryImpl sessionFactory = (SessionFactoryImpl) session.getSessionFactory();
  Connection conn = null;
  String result = null;
  try {
   conn = sessionFactory.getConnectionProvider().getConnection();
   if (conn == null || conn.isClosed()) {
    try {
     Class.forName(driverClass);
     conn = DriverManager.getConnection(url, username, password);
    } catch (ClassNotFoundException e) {
     e.printStackTrace();
    }
   }
  } catch (SQLException e1) {
   e1.printStackTrace();
  }
  try {
//   conn = sessionFactory.getConnectionProvider().getConnection();
   CallableStatement call = conn.prepareCall("{call SP_FORMER_BMP_INFO_AUDIT(?,?,?,?,?,?,?,?,?,?,?,?)}");
   call.setString(1, entity.getParam1());
   call.setString(2, entity.getParam2());
   call.setString(3, entity.getParam3());
   call.setString(4, entity.getParam4());
   call.setString(5, entity.getParam5());
   call.setString(6, entity.getParam6());
   call.setString(7, entity.getParam7());
   call.setString(8, entity.getParam8());
   call.setString(9, entity.getParam9());
   call.setString(10, entity.getParam10());
   call.setString(11, entity.getParam11());
   call.registerOutParameter(12, Types.VARCHAR);
   call.execute();

result = call.getString(12);

System.out.println("老平台出、入金存储过程的执行结果是:"+result);
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   if (conn != null) {
    try {
     conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }
  
  return result;
 }

时间: 2024-12-19 18:19:03

Java调用存储过程,随着按钮点击增多,调用存储过程也增多,会出现超时问题的相关文章

java在线聊天项目 swt可视化窗口Design 登录框注册按钮点击改变窗口大小——出现注册面板 实现打开登录框时屏幕居中

登录框注册按钮点击改变窗口大小--出现注册面板  首先用swt可视化设计登录窗口如下图: 此时窗口高度为578 没点击注册时高度为301(可自己定) 注意:注册用户的Jpanel 的border选择Title Border,title属性是"注册用户"    布局Layout选择Absolute Layout 接着,对话框窗口设计好后,双击注册按钮,进行代码编辑,在注册按钮的监听代码中增加一个if判断,当等于301,就给改为窗口高度578,否则改为301 因为使用的是匿名内部类,不能直

java servlet调用带有多个返回结果集的存储过程

一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要返回更多结果集也是一样的,如果需要判断,就继续增加存储过程参数,如果不需要判断就直接在存储过程中,增加查询的SQL语句即可).实现这个功能还有更简单的方法,可以写SQL关联语句查询出两张表的结果,返回一个组合的结果集.我这里当然是为了实现这个效果,所以把它的实现复杂化了.继续说下我今天在mysql上

Java基础系列12:使用CallableStatement接口调用数据库中的存储过程

前言:以下内容均以MySQL中的存储过程举例说明 一 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是

Java(JCo3)与SAP系统相互调用

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4291479.html 外部系统(Java)调用BAPI函数... 78 安装JCo3. 78 创建JCo3连接... 79 直连... 79 连接池... 81 DestinationDataProvider接口(不需连接属性配置文件)..

Android Day01-Android按钮点击事件的4种写法

按钮点击事件,说白了就一个方法,setOnClickListener(OnClickListener). 只要传递的参数只要是OnClickListener接口的子类即可,很容易想到的2种实现方式就是匿名内部类和定义一个类实现这个接口.另外还有2种实现方法,有必要着重讲一下: 1.让Activity自身实现OnClickListener接口,传递setOnClickListener参数用this. 然后在onClick(View v)方法中,判断事件源id. switch(v.getId())

Android学习笔记(3)——按钮点击注册事件的四种写法

搬运自本人博客,xge技术博客 http://www.xgezhang.com/android_button_onclick_4_ways.html Android下,按钮点击事件是在开发过程中经常会写到的东西.这里总结一下常见的四种写法: 界面代码就是一个button控件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <RelativeLayout xmlns:android="http://schemas.android.com/apk/re

Java接口回调实现按钮监听

做Android开发的时候,经常碰到View的事件监听,虽然一直在用,但从未思考它的实现原理.还有回调函数虽然经常听说,但是总感觉很晕,一想脑袋就开始乱了.所以今天就写点东西来理一下思路. 回调函数 以下是维基百科上的定义: 在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 光看定义可能晦涩难懂,下面还是回到标题,用

Android中使用OnClickListener接口实现按钮点击的低级失误

今天写了几行极为简单的代码,就是想implements  View.OnCLickListener.然后实现按钮点击操作.但是按钮却没有反应,找了五分钟还是没有结果. 以下是我的代码,希望大家不要嘲笑: XML布局如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:la

Android实现按钮点击效果(第一次点击变色,第二次恢复)

1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="点击变色" android:background="@drawable/btn_st" android:gravity="center&