需求:使用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
评一波