|
需求:使用oracle的session级的临时表,每个人登录系统后,使用自己的临时表,数据不互相干扰
实现:自己写代码建立jdbc连接,将这个连接存入session,下次使用时,从session中获取这个连接,这样使用同一个连接访问临时表,最后在注销的时候,关闭这个连接。
1、建立jdbc连接、访问session代码- public static void tempTable(){
- java.sql.Connection conn = null;
- java.sql.PreparedStatement pstmt = null;
- try {
- HttpSession session = ContextHelper.getSessionContext().getSession();//获得session
- conn = (java.sql.Connection) session.getAttribute("conn");//从session中取值
- if(conn == null){
- java.lang.System.out.println("-----------new");
- Class.forName("oracle.jdbc.driver.OracleDriver");
- conn = DriverManager.getConnection("jdbc:oracle:thin:@oracle-10.justep.com:1521:orcl", "x5sys", "1"); //建立连接
- session.setAttribute("conn", conn);//给session赋值
- }else{
- java.lang.System.out.println("-----------old");
- }
- pstmt = conn.prepareStatement("insert into temp_tbl (cola) select '"
- +ContextHelper.getOperator().getName()+"' from dual");
- pstmt.execute();//操作临时表
-
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery("select cola from temp_tbl");
- ResultSetMetaData rsmd = rs.getMetaData();
- int columnCount = rsmd.getColumnCount();
- while (rs.next()){ //在控制台输出临时表中的数据
- for (int i=1; i<=columnCount; i++){
- java.lang.System.out.print(rs.getString(i) + " | ");
- }
- java.lang.System.out.println();
- }
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- } finally {
- try {
- if (pstmt != null) {
- pstmt.close();
- }
- } catch (SQLException e) {
- java.lang.System.out.println("##close.SQLException");
- }
- }
- }
复制代码 2、注销时关闭连接的代码
打开/BIZ/SA/OPM/system/system.process.m,动作设置,选择logoutAction,写执行前事件- public static void systemProcessBeforeLogoutAction() {
- try{
- HttpSession session = ContextHelper.getSessionContext().getSession();//获得session
- java.sql.Connection conn;
- conn = (java.sql.Connection) session.getAttribute("conn");//从session中取值
- if(conn != null){
- conn.close();//关闭连接
- java.lang.System.out.println("--------cloase--------");
- }
- }catch(Exception e){
- throw new RuntimeException(e);
- }
- }
复制代码 说明:不能使用x5提供的方法,因为x5在获取连接时,会从连接池中选择一个可用的连接,这个连接很可能是其他人释放的连接,临时表中就可能存在数据,因此不能使用这样的连接。 |
|