当前位置: 技术问答>java相关
讨论:关于Bean中变量值的问题
来源: 互联网 发布时间:2017-04-05
本文导语: 代码如下: package E_Sms; import java.sql.*; import E_Sms.*; public class CheckLink { Test MT=null; String strHint = ""; String strSQL=""; private String user_ln,user_name,user_pwd,user_bir,user_email,user_tel; public vo...
代码如下:
package E_Sms;
import java.sql.*;
import E_Sms.*;
public class CheckLink {
Test MT=null;
String strHint = "";
String strSQL="";
private String user_ln,user_name,user_pwd,user_bir,user_email,user_tel;
public void CheckLink() { }
public short getLevel(String link)
{//验证登录用户的合法性
try
{
MT=new Test();
MT.initBean();
strSQL="select user_level from session where link='"+link+"'";
ResultSet rs = MT.executeQuery(strSQL);
rs.first();
return rs.getShort(1);
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return 3;
}
public int getUID(String link)
{//验证登录用户的合法性
try
{
MT=new Test();
MT.initBean();
strSQL="select user_id from session where link='"+link+"'";
ResultSet rs = MT.executeQuery(strSQL);
rs.first();
return rs.getInt(1);
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return -1;
}
public boolean CheckUNM(String uln,int user_id)
{
try
{
MT=new Test();
MT.initBean();
strSQL="select user_name from user_info where user_ln='"+uln+"'and user_id!="+user_id;
ResultSet rs = MT.executeQuery(strSQL);
rs.last();
int iRow=rs.getRow();
if (iRow>0)
{
return true;
}
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return false;
}
public boolean CheckTel(String utel,int user_id)
{
try
{
MT=new Test();
MT.initBean();
strSQL="select user_tel from user_info where user_tel='"+utel+"'and user_id!="+user_id;
ResultSet rs = MT.executeQuery(strSQL);
rs.last();
int iRow=rs.getRow();
if (iRow>0)
{
return true;
}
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return false;
}
public boolean getInfo(String link)//获取用户信息
{
try
{
MT=new Test();
MT.initBean();
strSQL="select * from user_info where user_id in (select user_id from session where link='"+link+"')";
ResultSet rs = MT.executeQuery(strSQL);
if (rs.absolute(1))
{
user_ln=rs.getString("user_ln");
user_name=rs.getString("user_name");
user_pwd=rs.getString("user_pwd");
user_bir=rs.getString("user_bir");
user_email=rs.getString("user_email");
user_tel=rs.getString("user_tel");
rs.close();
return true;
}
else{
rs.close();
return false;
}
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return false;
}
public String getuser_bir()
{
return user_bir;
}
public String getuser_email()
{
return user_email;
}
public String getuser_tel()
{
return user_tel;
}
public String getuser_pwd()
{
return user_pwd;
}
public String getuser_name()
{
return user_name;
}
public String getuser_ln()
{
return user_ln;
}
}//~class
会不会出现这样的问题:
A用户执行了getInfo("123")后同时B用户执行getInfo("456")
A用户执行getuser_bir()等函数得到的变量值是对应哪一个?
在Jsp中的调用如下:
感谢大家!
package E_Sms;
import java.sql.*;
import E_Sms.*;
public class CheckLink {
Test MT=null;
String strHint = "";
String strSQL="";
private String user_ln,user_name,user_pwd,user_bir,user_email,user_tel;
public void CheckLink() { }
public short getLevel(String link)
{//验证登录用户的合法性
try
{
MT=new Test();
MT.initBean();
strSQL="select user_level from session where link='"+link+"'";
ResultSet rs = MT.executeQuery(strSQL);
rs.first();
return rs.getShort(1);
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return 3;
}
public int getUID(String link)
{//验证登录用户的合法性
try
{
MT=new Test();
MT.initBean();
strSQL="select user_id from session where link='"+link+"'";
ResultSet rs = MT.executeQuery(strSQL);
rs.first();
return rs.getInt(1);
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return -1;
}
public boolean CheckUNM(String uln,int user_id)
{
try
{
MT=new Test();
MT.initBean();
strSQL="select user_name from user_info where user_ln='"+uln+"'and user_id!="+user_id;
ResultSet rs = MT.executeQuery(strSQL);
rs.last();
int iRow=rs.getRow();
if (iRow>0)
{
return true;
}
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return false;
}
public boolean CheckTel(String utel,int user_id)
{
try
{
MT=new Test();
MT.initBean();
strSQL="select user_tel from user_info where user_tel='"+utel+"'and user_id!="+user_id;
ResultSet rs = MT.executeQuery(strSQL);
rs.last();
int iRow=rs.getRow();
if (iRow>0)
{
return true;
}
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return false;
}
public boolean getInfo(String link)//获取用户信息
{
try
{
MT=new Test();
MT.initBean();
strSQL="select * from user_info where user_id in (select user_id from session where link='"+link+"')";
ResultSet rs = MT.executeQuery(strSQL);
if (rs.absolute(1))
{
user_ln=rs.getString("user_ln");
user_name=rs.getString("user_name");
user_pwd=rs.getString("user_pwd");
user_bir=rs.getString("user_bir");
user_email=rs.getString("user_email");
user_tel=rs.getString("user_tel");
rs.close();
return true;
}
else{
rs.close();
return false;
}
}
catch(SQLException ex)
{
strHint = "executeQuery: " + ex.getMessage();
System.err.println(strHint);
}
return false;
}
public String getuser_bir()
{
return user_bir;
}
public String getuser_email()
{
return user_email;
}
public String getuser_tel()
{
return user_tel;
}
public String getuser_pwd()
{
return user_pwd;
}
public String getuser_name()
{
return user_name;
}
public String getuser_ln()
{
return user_ln;
}
}//~class
会不会出现这样的问题:
A用户执行了getInfo("123")后同时B用户执行getInfo("456")
A用户执行getuser_bir()等函数得到的变量值是对应哪一个?
在Jsp中的调用如下:
感谢大家!
|
你是怎样调用bean的?
如果用new操作符,肯定得到的是一个新的实例(这是绝大多数情况下)。如果你在调用的时候用了单态模式,就有可能造成线程安全的问题。
for example:
public class GetObject{
private static CheckLink checkOne;
public static CheckLink getOneCheckLink()
{
if (checkOne==null)
{
checkOne = new CheckLink();
}
return checkOne;
}
}
如果你的实例是从上面这个class得到的:
checkOne = GetObject.getOneCheckLink();
那就会出现你所说的那正情况。
btw,你的构造方法不对吧,怎么还有void,构造方法没有返回值。
如果用new操作符,肯定得到的是一个新的实例(这是绝大多数情况下)。如果你在调用的时候用了单态模式,就有可能造成线程安全的问题。
for example:
public class GetObject{
private static CheckLink checkOne;
public static CheckLink getOneCheckLink()
{
if (checkOne==null)
{
checkOne = new CheckLink();
}
return checkOne;
}
}
如果你的实例是从上面这个class得到的:
checkOne = GetObject.getOneCheckLink();
那就会出现你所说的那正情况。
btw,你的构造方法不对吧,怎么还有void,构造方法没有返回值。
|
UseBean就相当于new,所以不会有什么问题了。
|
我是这样认为的,在A用户执行了getInfo("123")后同时B用户执行getInfo("456"),其实jvm会为其创建不同的实例,也就是说A用户与B用户应该是独立的,他们有各自的实例,所以我想应该是互不影响的~
不知道我这样理解对不对~请大家说一下~~~~是个值得讨论的问题~
不知道我这样理解对不对~请大家说一下~~~~是个值得讨论的问题~
|
其实,根本的问题就是,在你的bean中,每一个属性都不是static的,你的bean也不是static的,这样,用户得到的实例就是不同的,实例的属性也不是同一个。