前提: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集群也是解决跨服务器问题的一个好方法.