起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2439|回复: 3

使用数据库的临时表

[复制链接]

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-6-10 09:38:07 | 显示全部楼层 |阅读模式
需求:使用oracle的session级的临时表,每个人登录系统后,使用自己的临时表,数据不互相干扰
实现:自己写代码建立jdbc连接,将这个连接存入session,下次使用时,从session中获取这个连接,这样使用同一个连接访问临时表,最后在注销的时候,关闭这个连接。

1、建立jdbc连接、访问session代码
  1. public static void tempTable(){
  2.         java.sql.Connection conn = null;
  3.         java.sql.PreparedStatement pstmt = null;
  4.         try {
  5.                 HttpSession session = ContextHelper.getSessionContext().getSession();//获得session
  6.                 conn = (java.sql.Connection) session.getAttribute("conn");//从session中取值
  7.                 if(conn == null){
  8.                         java.lang.System.out.println("-----------new");
  9.                         Class.forName("oracle.jdbc.driver.OracleDriver");
  10.                         conn = DriverManager.getConnection("jdbc:oracle:thin:@oracle-10.justep.com:1521:orcl", "x5sys", "1");  //建立连接
  11.                         session.setAttribute("conn", conn);//给session赋值
  12.                 }else{
  13.                         java.lang.System.out.println("-----------old");
  14.                 }
  15.                 pstmt = conn.prepareStatement("insert into temp_tbl (cola) select '"
  16.                        +ContextHelper.getOperator().getName()+"' from dual");
  17.                 pstmt.execute();//操作临时表
  18.                         
  19.                 Statement stmt = conn.createStatement();
  20.                 ResultSet rs = stmt.executeQuery("select cola from temp_tbl");
  21.                 ResultSetMetaData rsmd = rs.getMetaData();   
  22.                 int columnCount = rsmd.getColumnCount();  
  23.                 while (rs.next()){   //在控制台输出临时表中的数据
  24.                         for (int i=1; i<=columnCount; i++){   
  25.                                 java.lang.System.out.print(rs.getString(i) + " | ");   
  26.                        }   
  27.                        java.lang.System.out.println();   
  28.                 }   
  29.         } catch (ClassNotFoundException e) {  
  30.                         throw new RuntimeException(e);
  31.         } catch (SQLException e) {
  32.                         throw new RuntimeException(e);
  33.         } finally {
  34.                 try {
  35.                         if (pstmt != null) {
  36.                                 pstmt.close();
  37.                         }
  38.                 } catch (SQLException e) {
  39.                         java.lang.System.out.println("##close.SQLException");
  40.                 }
  41.         }
  42. }
复制代码
2、注销时关闭连接的代码
打开/BIZ/SA/OPM/system/system.process.m,动作设置,选择logoutAction,写执行前事件
  1.         public static void systemProcessBeforeLogoutAction() {
  2.                 try{
  3.                         HttpSession session = ContextHelper.getSessionContext().getSession();//获得session
  4.                         java.sql.Connection conn;
  5.                         conn = (java.sql.Connection) session.getAttribute("conn");//从session中取值
  6.                         if(conn != null){
  7.                                 conn.close();//关闭连接
  8.                                 java.lang.System.out.println("--------cloase--------");
  9.                         }
  10.                 }catch(Exception e){
  11.                         throw new RuntimeException(e);
  12.                 }
  13.         }
复制代码
说明:不能使用x5提供的方法,因为x5在获取连接时,会从连接池中选择一个可用的连接,这个连接很可能是其他人释放的连接,临时表中就可能存在数据,因此不能使用这样的连接。
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

387

主题

2393

帖子

4713

积分

论坛元老

Rank: 8Rank: 8

积分
4713
QQ
发表于 2014-6-10 16:47:16 | 显示全部楼层
请教一下上面这个方法一般用于哪些方面的需求?
QQ67886387

63

主题

269

帖子

774

积分

高级会员

Rank: 4

积分
774
QQ
发表于 2014-6-12 08:25:41 | 显示全部楼层
老师;
1.使用第一段代码,插入数据成功之后;再执行存储过程,数据 又没有了。。。
2.执行关闭连接的代码后;saveAction无法第二次进行保存了,只能退出重新登录 才能保存。。。
两点之间,贝尔最短。。。

0

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
QQ
发表于 2014-6-16 09:16:25 | 显示全部楼层
更多新域名等你注册,现在注册.cn域名即送企业邮箱
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2020-2-26 11:53 , Processed in 0.062023 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表