| 
| 
| J2EE数据库设计入门 |  
| 时间:2014-05-04 10:05:34  来源:不详  作者:佚名 |  
| | 在开发J2EE应用程序时 目录,或一个网站的用户信
 关系,再进行数据库的逻辑
 
 | ,通常要找出应用程序中涉及到 息。我们会将这些信息放在数据
 设计,把各种信息用不同的表来
 
 | 的各种信息,比如一个公司的产品 库里,然后分析这些数据的属性和
 存储。
 
 | 
 | 例如,要开发一个原料 。
 
 | 信息查询系统,可以创建下面两 
 
 | 个表分别表示原料和相应的生产商 
 
 | 
 | table production (ID 
 | , Name, Weight,Maker,Produce 
 | rID, Price, Volume) 
 | 
 | table producer (ID, Name, Teleph 
 | one, Address, Postcode) 
 | 
 | 表production包含了ID、名称、重量 ID、生产者名、电话、地址、邮编。这两
 
 | 、生产人、生产者ID、价格、体积。表producer包含 个表通过生产者ID相关联。
 
 | 
 | 数据库相关类可以分成 
 | 实体类(Entity Class)和会话 
 | 类(Session Class)。 
 | 
 | 实体类对应于表记录的封装,也就是 中的属性和记录中的字段是一一对应的。
 记录、删除一条记录、查找记录和更新一
 
 | 该类的一个实例对应于表中的一个记录。而且,该类 会话类对应于对表中所有记录的操作,比如增加一条
 条记录。
 
 | 
 | 通过使用这种设计模式,就可以使程序模块化,便于开发和维护。 | 
 | 在具体实现这种模式时 式中,我们很容易就发现可
 
 | ,往往要根据具体的应用程序来 以用EJB来实现。
 
 | 选用不同的实现技术。在上面的模 
 
 | 
 | EJB提出来的目的是用 应用系统,使用EJB来实现
 性,可以使应用程序更加可
 ,比如事务处理、安全等,
 应用不是分布式的,那么采
 
 | 于提供一种分布式组件系统的开 能大大减轻编程的工作量。同时
 靠,扩展性也大大加强。从而,
 而是把重点放在怎样实现业务逻
 用EJB有可能大大降低系统的性
 
 | 发。如果应用程序是一个分布式的 ,通过使用EJB容器的一些高级特
 开发人员就不必关心一些底层技术
 辑上。但是应该注意,如果开发的
 能,因为EJB调用的开销很大。
 
 | 
 | 在不使用EJB技术的情况下该如何实现上面介绍的这个模式呢? | 
 | 我们以刚才的开发产品信息查询系统为例介绍实现方式。 | 
 | 如前面讲到的,实体类 每个字段一一对应。必须注
 对实例的操作并不能马上反
 
 | 的每个实例与表中一个记录对应 意的是,实体类的实例是每个记
 应到数据库的记录中。
 
 | 。这样,实体类的属性应该和表的 录在内存中的对应,因此在程序中
 
 
 | 
 | 在实体类中,只是对数据的包装,因 getXX()方法。
 
 | 此,该类仅需要一些基本的方法,即setXX()和 
 
 | 
 | 下面是一个实体类,是对Production表的封装。 | 
 | protected int ProtectedID | 
 | public void setID(int iID); | 
 | public void setName(String sName); | 
 | public void setWEIGHT(String sWEIGHT); | 
 | public String getWEIGHT(); | 
 | public void set Maker(String sMaker); | 
 | public String getMaker(); | 
 | public void setProtected ID(int iID); | 
 | public int  getProtected ID(); | 
 | public void setPrice(double dPrice); | 
 | public double getPrice(); | 
 | public void setVolume(int iVolume); | 
 | public Production(int iID, Strin 
 | g sName, String sWEIGHT, int iProtected ID, 
 | 
 | double dPrice, int iVolume); | 
 | 会话类主要是对一个表 更新一条记录和查找一条记
 起来,或将实例与表中的记
 
 | 进行处理。这些操作可以是在表 录。这些操作的结果是将表中的
 录对应起来。
 
 | 中创建一条记录、删除一条记录、 记录和内存中的实体类的实例对应
 
 
 | 
 | void Add(Production production); | 
 | void Delete(Production production); | 
 | void Update(Production production); | 
 | Collection findbyID(int iID); | 
 | Collection findbyXXXX(XX,XX); | 
 | Collection findbyPul 
 | isherName(String sProducerNa 
 | me); 
 | 
 | 上面在类的申明中,Add()用于将内 Delete()用于删除数据库中的某一个记录
 findbyXXXX()则对应于Select语句。
 
 | 存中的一个Production实例映射到数据库中。 。Update()用于更新表中的一个记录。而
 
 
 | 
 | 上面只是简单的介绍了 作的一致性。
 
 | 怎样实现实体类和会话类,在具 
 
 | 体的应用中,还要考虑到数据库操 
 
 | 
 | 为了确保对数据操作的完整和一致,在程序设计时要充分考虑到事务处理方面的问题。 | 
 | 1.JDBC中怎样将多个SQL语句组合成一个事务。 | 
 | 在JDBC中,当打开一个 当作一个事务,即每次执行
 一个事务,要将auto-commi
 
 | 连接对象Connection,缺省是au 一个语句,都会自动得到事务确
 t模式屏蔽掉。
 
 | to-commit模式,每个SQL语句都被 认。为了能将多个SQL语句组合成
 
 
 | 
 | 在auto-commit模式屏蔽掉之后,如 。在commit()方法调用之后的所有SQL会
 
 | 果不调用commit()方法,SQL语句不会得到事务确认 在方法commit()再次调用时得到确认。
 
 | 
 
 
 | con.setAutoCommit(false); | 
 | PreparedStatement u 
 | pdateSales=con. 
 | 
 | updateSales.setInt(1,50); | 
 | updateSales.executeUpdate(); | 
 | PreparedStatement updateTotal=c 
 | on. 
 | 
 | prepareStatement(&qu LIKE ?");
 
 | ot;UPDATE COFFEES SET TOTAL 
 
 | =TOTAL+ ? WHERE COD_NAME 
 
 | 
 | updateTotal.setInt(1,50); | 
 | updateTotal.setStri 
 | ng(2,"Colo mbian") 
 | ; 
 | 
 | updateTotal.executeUpdate(); | 
 | 另外,在J2EE中,程序里可以使用JT 处理分布式的事务处理。另外,如果使用
 来实现。
 
 | A来调用底层的JTS(JAVA Transaction Service)来 EJB,可以通过在描述文件中指定Transaction的属性
 
 
 | 
 
 
 |  |  |  |