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

📄 customerbmpbean.java~224~

📁 郭克华j2ee高级框架实战教学视频源代码 这个是比较值得一看的 由郭克华博士在总结多年Java培训的基础上
💻 JAVA~224~
字号:
package prj32_1;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.ejb.FinderException;
import java.sql.*;
import java.util.Collection;
import java.util.ArrayList;

//实体Bean实现类:po+增删改查的函数
public class CustomerBmpBean
    implements EntityBean {

  EntityContext entityContext;
  String account;
  String password;
  String cname;
  double cbalance;

  private Connection conn = null;

  public CustomerBmpBean(){//到达池状态
    System.out.println("CustomerBmpBean构造函数");
    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      conn = DriverManager.getConnection("jdbc:odbc:School","scott","tiger");
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  //ejbCreate:对应home接口中的create,参数一样,返回主键类型
  //将内容添加到数据库,返回主键给环境(context)
  public String ejbCreate(String account, String password, String cname,
                          double cbalance) throws CreateException {//到达准备状态
    System.out.println("ejbCreate");
    setAccount(account);
    setPassword(password);
    setCname(cname);
    setCbalance(cbalance);
    try {
      String sql = "INSERT INTO T_CUSTOMER(ACCOUNT,PASSWORD,CNAME,CBALANCE) VALUES(?,?,?,?)";
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1,account);
      ps.setString(2,password);
      ps.setString(3,cname);
      ps.setDouble(4,cbalance);
      ps.executeUpdate();
      return account;
    }
    catch (Exception ex) {
      //关掉ps之类的数据库访问组件,此处省略,下同
      ex.printStackTrace();
    }
    return null;
  }

  //ejbPostCreate:J2EE规范函数,在ejbCreate函数调用之后自动调用,参数一样,无返回类型,可以不写
  public void ejbPostCreate(String account, String password, String cname,
                            double cbalance) throws CreateException {//到达准备状态
    System.out.println("ejbPostCreate");
  }

  //ejbFindByPrimaryKey:对应home接口中的findByPrimaryKey,参数一样,返回主键类型
  //从数据库载入数据,返回主键给环境(context)
  public String ejbFindByPrimaryKey(String account) throws
      FinderException {//到达池状态
    System.out.println("ejbFindByPrimaryKey");
    try {
      String sql = "SELECT ACCOUNT FROM T_CUSTOMER WHERE ACCOUNT=?";
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1,account);
      ResultSet rs = ps.executeQuery();
      if(rs.next()){
        this.account = rs.getString("ACCOUNT");
        return this.account;
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }

  //ejbFindByCbalance:对应home接口中的findByCbalance,参数一样,返回Collection,注意:Collection内存储主键!
  //返回这个装有主键的集合给环境(context)
  public Collection ejbFindByCbalance(double money) throws FinderException {//到达池状态
    System.out.println("ejbFindByCbalance");
    ArrayList cuses = new ArrayList();
   try {
     String sql = "SELECT ACCOUNT FROM T_CUSTOMER WHERE CBALANCE>?";
     PreparedStatement ps = conn.prepareStatement(sql);
     ps.setDouble(1,money);
     ResultSet rs = ps.executeQuery();
     while(rs.next()){
       cuses.add(rs.getString("ACCOUNT"));
     }
   }
   catch (Exception ex) {
     ex.printStackTrace();
   }
   return cuses;
  }

  /**************以下七个函数从接口重写******************/
  //setEntityContext:实际上在构造函数之后调用,也可以作初始化工作,如得到数据库连接
  public void setEntityContext(EntityContext entityContext) {//到达池状态
    System.out.println("setEntityContext");
    this.entityContext = entityContext;
  }
  //ejbLoad:负责数据库对Bean的同步:将用主键标识的记录载入到Bean中
  public void ejbLoad() {//准备状态下使用
    System.out.println("ejbLoad");
    try {
      String sql = "SELECT PASSWORD,CNAME,CBALANCE FROM T_CUSTOMER WHERE ACCOUNT=?";
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1,this.account);
      ResultSet rs = ps.executeQuery();
      if(rs.next()){
        this.password = rs.getString("PASSWORD");
        this.cname = rs.getString("CNAME");
        this.cbalance = rs.getDouble("CBALANCE");
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  //ejbStore:负责Bean对数据库的同步:将用主键标识的Bean更新到数据库记录
  public void ejbStore() {//准备状态下使用
    System.out.println("ejbStore");
    try {
      String sql = "UPDATE T_CUSTOMER SET PASSWORD=?,CNAME=?,CBALANCE=? WHERE ACCOUNT=?";
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, this.password);
      ps.setString(2, this.cname);
      ps.setDouble(3, this.cbalance);
      ps.setString(4, this.account);
      ps.executeUpdate();
  }
  catch (Exception ex) {
    ex.printStackTrace();
  }

  }
  //ejbRemove:负责由客户端来调用,将对象放入池状态,同时也删除数据库中的相应记录
  public void ejbRemove() throws RemoveException {//准备状态下使用,到达池状态
    System.out.println("ejbRemove");
    try {
      String sql =
          "DELETE FROM T_CUSTOMER WHERE ACCOUNT=?";
      PreparedStatement ps = conn.prepareStatement(sql);
      ps.setString(1, this.account);
      ps.executeUpdate();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }

  }
  //实体Bean中为了优化资源分配,建立了池机制,一个在工作状态下的Bean放入池中,叫做Passivate,主键被保存在context中
  //池中的Bean到达工作状态叫做Activate,池状态下的Bean可以被其他记录重用,节省内存
  public void ejbActivate() {
    System.out.println("ejbActivate");
    this.account = (String)entityContext.getPrimaryKey();
  }

  public void ejbPassivate() {//释放资源,到达池状态,如果一个Bean对象在准备状态下长期不用
    System.out.println("ejbPassivate");
    this.account = null;
    //诸如此类...
  }

  //释放资源
  public void unsetEntityContext() {
  System.out.println("unsetEntityContext");
    this.entityContext = null;
    try {
      if (conn != null) {
        conn.close();
        conn = null;
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }


  /************以下是po的支持函数:set,get函数,大部分和远程接口中的set,get函数相对应*********/
  public void setAccount(String account) {
  this.account = account;
}

public void setPassword(String password) {
  this.password = password;
}

public void setCname(String cname) {
  this.cname = cname;
}

public void setCbalance(double cbalance) {
  this.cbalance = cbalance;
}

public String getAccount() {
  return account;
}

public String getPassword() {
  return password;
}

public String getCname() {
  return cname;
}

public double getCbalance() {
  return cbalance;
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -