⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accountoperationejbbean.java

📁 J2EE上课详细课件,精通J2EE编程教程.
💻 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 + -