需求:使用oracle的session级的临时表,每个人登录系统后,使用自己的临时表,数据不互相干扰

实现:自己写代码建立jdbc连接,将这个连接存入session,下次使用时,从session中获取这个连接,这样使用同一个连接访问临时表,最后在注销的时候,关闭这个连接。

1 建立jdbc连接、访问session代码

<pre>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在获取连接时,会从连接池中选择一个可用的连接,这个连接很可能是其他人释放的连接,临时表中就可能存在数据,因此不能使用这样的连接。

 下载:数据库

本文由WeX5君整理,WeX5一款开源免费的html5开发工具H5 App开发就用WeX5!

阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443