📄 customerbmpbean.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 + -