数据库存session

前提:oracle数据库,java

sql:

  create table TBL_SESSION
(

ID             VARCHAR2(10) not null,
  USER_ID        VARCHAR2(50) not null,
  USER_SESSION   LONG

)

数据库连接用jdbc: 文件:DBConnection_jdbc.java  (略)

处理代码: dbsession.java

import com.db_jdbc.DBConnection_jdbc;
import com.util.StrUtils;
import java.sql.ResultSet;
import java.util.Date;

public class dbsession {
 private int SUCCESS = 1;

 private int ERROR = 0;

 private int GET_More_ERROR = 2;

 DBConnection_jdbcDao db = new DBConnection_jdbc();

 public dbsession() {
 }

 // session:str:user_id,str1:APPLICATION_ID,str2:session_name,str3:session_value,foretime:pasttime
 public int session(String str, String str1, String str2, String str3,
   int foretime) {

  int t = session_update(str, str1, str2, str3, foretime);
  return t;
 }

 public String getsession(String str, String str1, String str2, int foretime) {
  String strTemp = session_select(str, str1, str2, foretime);
  return strTemp;
 }

 // value: str : ,str1:name
 String session_value(String str, String str1) {
  if (StrUtils.checkIsBlank(str) && StrUtils.checkIsBlank(str1)) {
   String strTemp1 = "<" + str1 + ">";
   String strTemp2 = "</" + str1 + ">";
   int t1 = str.indexOf(strTemp1) + strTemp1.length();
   int t2 = str.indexOf(strTemp2);
   str = str.substring(t1, t2);
  }
  return str;
 }

 // select :
 // str:user_id,str1:APPLICATION_ID,str2:session_name,foretime:pasttime
 String session_select(String str, String str1, String str2, int foretime) {
  String strTemp = null;
  Date datetime = null;
  try {
   db.openConnection();
   ResultSet rs = db
     .executeQuery("select user_session,update_date from tbl_session where user_id = '"
       + str + "' and application_id ='" + str1 + "'");
   if (rs.next()) {

    strTemp = rs.getString("user_session");
    datetime = rs.getDate("update_date");

    Date date = new Date();
    if ((date.getTime() - datetime.getTime()) < foretime) {
     strTemp = session_value(strTemp, str2);
    } else {
     strTemp = null;
    }
   }
   db.close();
  } catch (Exception e) {
   System.err.println("wrong:select:" + e.getMessage());
  } finally {
   try {
    db.close();
   } catch (Exception e) {
    System.err.println("wrong:dbclose:" + e.getMessage());
   }

  }
  return strTemp;
 }

 // update
 // :str:user_id,str1:APPLICATION_ID,str2:session_name,str3:session_value,foretime:pasttime
 public int session_update(String str, String str1, String str2,
   String str3, int foretime) {
  int t = 0;
  try {
   db.openConnection();
   ResultSet rs = db
     .executeQuery("select user_session,update_date from tbl_session where user_id = '"
       + str + "' and application_id ='" + str1 + "'");
   Date datetime = null;
   String rsstr = null;
   if (rs.next()) {
    rsstr = rs.getString("user_session");
    datetime = rs.getDate("update_date");
   } else {
    t = session_insert(str, str1, str2, str3);
    return t;
   }
   Date date = new Date();
   if ((date.getTime() - datetime.getTime()) < foretime) {

    rsstr = session_replace(rsstr, str2, str3);

    t = db.executeUpdate("update tbl_session set user_session ='"
      + rsstr + "',update_date = sysdate where user_id = '"
      + str + "' and application_id ='" + str1 + "' ");
   } else {

    t = db.executeUpdate("update tbl_session set user_session ='<"
      + str2 + ">" + str3 + "</" + str2
      + ">',update_date = sysdate where user_id = '" + str
      + "' and application_id ='" + str1 + "' ");
   }
   db.close();
   if (t == 1) {
    return SUCCESS;
   } else if (t > 1) {
    return GET_More_ERROR;
   } else {
    return ERROR;
   }
  } catch (Exception e) {
   System.err.println("wrong:update:" + e.getMessage());
  } finally {
   try {
    db.close();
   } catch (Exception e) {
    System.err.println("wrong:dbclose:" + e.getMessage());
   }

  }

  return ERROR;
 }

 // insert
 // :str:user_id,str1:APPLICATION_ID,str2:session_name,str3:session_value
 int session_insert(String str, String str1, String str2, String str3) {
  try {
   String id = getid();
   db.openConnection();
   boolean b = db
     .execute("insert into tbl_session (id,user_id,application_id,user_session,create_date,update_date,flag)"
       + "values('"
       + id
       + "','"
       + str
       + "','"
       + str1
       + "','<"
       + str2
       + ">"
       + str3
       + "</"
       + str2
       + ">',sysdate,sysdate,1)");
   db.close();
   if (b)
    return SUCCESS;
   else
    return ERROR;
  } catch (Exception e) {
   System.err.println("wrong:insert:" + e.getMessage());
   return ERROR;
  } finally {
   try {
    db.close();
   } catch (Exception e) {
    System.err.println("wrong:dbclose:" + e.getMessage());
   }
  }
 }

 // 随机ID
 String getid() {
  String id = null;
  try {
   db.openConnection();
   ResultSet rs = null;

   id = StrUtils.randomAlphanumeric(10);                      //随机id生成 (代码略)
   rs = db.executeQuery("select id from tbl_session where id = '" + id
     + "'");
   if (rs.next()) {                                                                       //验证id不重复
    id = StrUtils.randomAlphanumeric(10);
    rs = db.executeQuery("select id from tbl_session where id = '"
      + id + "'");
   }

   db.close();

  } catch (Exception e) {
   System.err.println("wrong:getid:" + e.getMessage());
  } finally {
   try {
    db.close();
   } catch (Exception e) {
    System.err.println("wrong:dbclose:" + e.getMessage());
   }

  }

  return id;
 }

 // str: , str1:name,str2:value
 String session_replace(String str, String str1, String str2) {
  if (StrUtils.checkIsBlank(str) && StrUtils.checkIsBlank(str1)) {
   String strTemp1 = "<" + str1 + ">";
   String strTemp2 = "</" + str1 + ">";
   int t1 = str.indexOf(strTemp1);
   int t2 = str.indexOf(strTemp2);
   if (t1 == -1 || t2 == -1) {
    str = str + "<" + str1 + ">" + str2 + "</" + str1 + ">";
   } else {
    String rsstr1 = str.substring(0, t1);
    String rsstr2 = str.substring(t2, str.length());
    str = rsstr1 + strTemp1 + str2 + rsstr2;
   }
  }
  return str;
 }

 public static void main(String[] args) {
  dbsession db = new dbsession();
  // String session = db.getid();
  // System.err.println("session:" + session);
  // int t = db.session("10001", "1010111011", "wei", "tiantian");             //存入方法    "wei"是session_name ,"tiantian"是session_value.
  // int t = db.session_update("10001", "1010111011", "wyy", "wei",
  // 200000000);
  // System.err.println("t :" + t);
  String str = db.getsession("10001", "1010111011", "wei", 200000000);   //取出方法"wei"该session_name
  System.err.println("str:" + str);

 }
}

 

使用该类型存储可以解决跨服务器存储session问题,当然很多应用服务器的session集群也是解决跨服务器问题的一个好方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值