📄 accountoperationejbbean.java
字号:
package j2ee.accountEJB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;
//账户操作业务实现类
public class accountOperationEJBBean implements SessionBean {
public SessionContext ctx=null;//上下文
//EJB消亡时调用
public void ejbRemove() throws EJBException {}
//初始化设置会话上下文时调用
public void setSessionContext(SessionContext arg0) throws EJBException {
ctx=arg0;
}
//激活EJB,无状态EJB不会调用
public void ejbActivate() throws EJBException {}
//钝化EJB,无状态EJB不会调用
public void ejbPassivate() throws EJBException {}
//创建EJB时调用
public void ejbCreate() throws EJBException{}
//行内转账业务操作,参数account_id1为转出账号,account_id2为转入账号,amout为操作金额
public int exchangeMoneyMyBank(long account_id1,long account_id2,double amout){
Connection conn=getConnection();
if(conn==null) return 0;//返回0表创建数据库连接失败
try{
conn.setAutoCommit(false);
}catch(SQLException e){
System.out.println("设置事务开始时发生异常!");
System.out.println(e);
return 1;//返回1表设置事务开始时发生异常
}
try{
if(withdraw(account_id1,amout,conn)==0)//更新失败
throw new SQLException("从账户"+account_id1+"中转出金额失败!");
if(deposit(account_id2,amout,conn)==0)//更新失败
throw new SQLException("向账户"+account_id2+"中转入金额失败!");;
conn.commit();//提交事务
System.out.println("转账操作成功,转出账户"+account_id1+"," +
"转入账户"+account_id2+",操作金额"+amout+"。");
}catch(SQLException e1){
try{
conn.rollback();//回滚事务
}catch(SQLException e2){
e2.printStackTrace();
}
System.out.println(e1);
return 2;//返回2表操作过程中发生异常,并作了事务回滚
}finally{
try{
if(conn!=null) conn.close();
}catch(Exception e3){
System.out.println(e3);
}
}
return 3;//返回3表操作成功
}
//取钱,参数account_id为取钱的账号ID,amout为取出金额,conn为数据库连接对象
//出现异常或失败就返回0
public int withdraw(long account_id,double amount,Connection conn) {
PreparedStatement ps=null;//SQL语句对象
ResultSet rs=null;
try{
ps=conn.prepareStatement("select account_money from account" +
" where account_id=?");
ps.setDouble(1,account_id);
rs=ps.executeQuery();
if(rs.next()){
if(rs.getDouble("account_money")-amount<0){//账户余额不够
System.out.println("账户"+account_id+"余额不足!");
return 0;
}
}else return 0;
ps.close();
ps=conn.prepareStatement("update account set account_money" +
"=account_money-? where account_id=?");
ps.setDouble(1,amount);
ps.setDouble(2,account_id);
if(ps.executeUpdate()==0)//没有更新成功
return 0;
}catch(SQLException e){
System.out.println(e);
return 0;
}
return 1;
}
//存钱,参数account_id为存钱的账号ID,amout为存入金额,conn为数据库连接对象
//出现异常或失败就返回0
public int deposit(long account_id,double amount,Connection conn) {
PreparedStatement ps=null;//SQL语句对象
ResultSet rs=null;
try{
ps=conn.prepareStatement("update account set account_money" +
"=account_money+? where account_id=?");
ps.setDouble(1,amount);
ps.setDouble(2,account_id);
if(ps.executeUpdate()==0)//没有更新成功
return 0;
}catch(SQLException e){
System.out.println(e);
return 0;
}
return 1;
}
//得到数据库连接
public Connection getConnection(){
Hashtable props = new Hashtable();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
props.put(InitialContext.PROVIDER_URL,"t3://127.0.0.1:7001");
try{
InitialContext initCtx = new InitialContext(props);
DataSource ds = (DataSource)initCtx.lookup("myDataSource");
return ds.getConnection();
}catch(Exception e){
System.out.println("建立数据库连接失败!请检查系统配置!");
System.out.println(e);
return null;
}
}
Connection connSQL=null;//连接SQL Server
Connection connSybase=null;//连接SYBASE
//功能:从用SQL Server的银行的一个账户转账到用Sybase的银行的一个账户
//说明:参数account_id1为用SQL Server的银行的转出账号,
//account_id2为用Sybase的银行的转入账号,amout为操作金额
public int exchangeMoneyTwoBank(long account_id1,long account_id2,double amout){
getConnAll();
if(connSQL==null||connSybase==null) return 0;//返回0表创建数据库连接失败
UserTransaction userTrans=ctx.getUserTransaction();
try{
userTrans.begin();//事务开始
if(withdraw(account_id1,amout,connSQL)==0)//更新失败
throw new SQLException("从账户"+account_id1+"中转出金额失败!");
if(deposit(account_id2,amout,connSybase)==0)//更新失败
throw new SQLException("向账户"+account_id2+"中转入金额失败!");;
userTrans.commit();//提交事务
System.out.println("跨行转账操作成功,转出账户"+account_id1+"," +
"转入账户"+account_id2+",操作金额"+amout+"。");
}catch(Exception e1){
try{
userTrans.rollback();//回滚事务
}catch(Exception e2){
e2.printStackTrace();
}
System.out.println(e1);
return 2;//返回2表操作过程中发生异常,并作了事务回滚
}finally{
try{
if(connSQL!=null) connSQL.close();
if(connSybase!=null) connSybase.close();
}catch(Exception e3){
System.out.println(e3);
}
}
return 3;//返回3表操作成功
}
//建立与SQL Server及SYBASE的连接
public void getConnAll(){
Hashtable props = new Hashtable();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
props.put(InitialContext.PROVIDER_URL,"t3://127.0.0.1:7001");
try{
InitialContext initCtx = new InitialContext(props);
DataSource ds = (DataSource)initCtx.lookup("myDataSource");
connSQL=ds.getConnection();
ds=(DataSource)initCtx.lookup("mySybaseDS");
connSybase=ds.getConnection();
}catch(Exception e){
System.out.println("建立数据库连接失败!请检查系统配置!");
System.out.println(e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -