随笔-23  评论-6  文章-1  trackbacks-0

1.运行环境:
JDK,ORACLE9i以上,CASTOR包。建议使用JBUILDE
工具进行开发
2.使用环境:
采用ORM(关系对象映射)操作数据库数据,适用于Application与WEB方式下的开发。

3.功能:
    提供查询,更新,删除,插入(没实现主键自动生成),(分页暂时没实现)。4.使用步骤:
首先在数据库建立一个cat表,字段为cat_id;name;sex;weight;类型1,4为数字型,2,
3为字符串型。

其次建立两个配置文件(由自己定义文件名称):
repository.xml配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<Repository>
 <TableDesc execid="CAT" identifyField="CAT_ID">
  <table>CAT</table>
  <condition />
 <FieldDesc name="CAT_ID" fieldType="java.lang.String" >
  <title>CAT_ID</title>
  </FieldDesc>
 <FieldDesc name="NAME" fieldType="java.lang.String" >
  <title>NAME</title>
  </FieldDesc>
 <FieldDesc name="SEX" fieldType="java.lang.String" >
  <title>SEX</title>
  </FieldDesc>
 <FieldDesc name="WEIGHT" fieldType="java.lang.Long" >
  <title>WEIGHT</title>
  </FieldDesc>
  </TableDesc>
</Repository>
配置文件的设计说明如下:
TableDesc 表示一个表的声明。
Execid 是类名一般情况下最好和表名一致(容易找到对应关系),但是不允许有下划线出现。注意这个类名不是全路径。
DentifyField 表中的主键,如果是复合主键则以逗号相隔开
Table 数据库表名
<FieldDesc name="SEX" fieldType="java.lang.String" >
  <title>SEX</title>
  </FieldDesc>
这里是表中字段的描述,name是字段名。 fieldType 是数据库字段对
应java中的类型,只有4中类型可填充:java.lang.String,
java.lang.Long, java.util.Date, java.lang.Double
title可要可不要.如果存在多个表,那么就在</TableDesc>和
</Repository>之间加入表描述。

pool-config.xml配置信息:
<?xml version="1.0" encoding="GB2312"?>
<ResourceParams>
<maxActive>10</maxActive>
<maxIdle>5</maxIdle>
<maxWait>10000</maxWait>
<username>test</username>
<password>test</password>
<driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
<url>jdbc:oracle:thin:@192.168.0.90:1521:forecast</url>
<removeAbandoned>true</removeAbandoned>
<removeAbandonedTimeout>60</removeAbandonedTimeout>
<logAbandoned>true</logAbandoned>
</ResourceParams>
把上述信息保存为XML文件。对这个文件不多做说明了。

确定两个文件已经存在,接下来就是要创建表CAT。
还有表所对应的BEAN。
下面是我在Hibernate的一个例子中建立的VO。(借用)
package com.cea.boat.dao;
  import java.util.*;
  public class Cat implements Cloneable  {
    //Declare Field
    private java.lang.String  catId;
    private java.lang.String  name;
    private java.lang.String  sex;
    private java.lang.Long  weight;
    //Get Method
    public java.lang.String getCatId() {
       return catId;
    }
    public java.lang.String getName() {
       return name;
    }
    public java.lang.String getSex() {
       return sex;
    }
    public java.lang.Long getWeight() {
       return weight;
    }
    //Set Method
    public void setCatId(java.lang.String catId) {
       this.catId=catId;
    }
    public void setName(java.lang.String name) {
       this.name=name;
    }
    public void setSex(java.lang.String sex) {
       this.sex=sex;
    }
    public void setWeight(java.lang.Long weight) {
       this.weight=weight;
    }
  public Object clone() {
    Object o = null;
    try {
      o = super.clone();
    }
    catch (CloneNotSupportedException ex) {
      System.out.println(o);
    }
    return o;
  }
  public boolean equals(Object obj) {
    Cat o = (Cat)obj;
    boolean result = true
        && (catId == o.catId || catId.equals(o.catId))
        && (name == o.name || name.equals(o.name))
        && (sex == o.sex || sex.equals(o.sex))
        && (weight == o.weight || weight.equals(o.weight))
    ;
    return result;
  }
  }
到此已经完成了该做的事了,下面是一个使用的例子。

l查询方式:
例子:
Void testQuery() throws Exception{
    {
System.setProperty(Const.RUN_KEY, Const.POOL_FACTORY_KEY);
      System.setProperty(Const.CONFIG_PATH,
                         "E:/project/CEAConnection/pool-config.xml");
      System.setProperty(Const.REPOSITORY_CONFIG_PATH,
                         "E:/project/CEAConnection/repository.xml");
}

ConnectionManage connectionManage = new ConnectionManage();
 connectionManage.activity("com.cea.boat.dao.Cat cat");
  
   Query Query=connectionManage.createQuery(“cat. Catid=’1’ ”);
    while (Query.hasNext()) {
      Object[] objects = Query.next();
      Cat cat = (Cat) objects[0];
    }
 connectionManage.close();
}
说明:
在WEB中使用只需要在网站启动时声明一次即可。
{
//指明使用连接池
System.setProperty(Const.RUN_KEY, Const.POOL_FACTORY_KEY);
//连接池参数配置文件
      System.setProperty(Const.CONFIG_PATH,
                         "E:/project/CEAConnection/pool-config.xml");
//配置文件指定
      System.setProperty(Const.REPOSITORY_CONFIG_PATH,
                         "E:/project/CEAConnection/repository.xml");
}

   声明一个连接管理者,管理数据库资源,事务的起始,它的生命周期最好是在一个事务结束就完结,当然你也可以在这个事务完结时继续用这个实例,来创建下一个事务的开始。不建议如此使用。
    ConnectionManage DataManage = new ConnectionManage();
   
激活要使用类(在配置中必须有Cat),类名为全路径如果要使用多个对象,则对象间要用逗号相隔开
connectionManage.activity("com.cea.boat.dao.Cat cat");

这里只需要给出SQL查询条件比如SQL中是select * from cat cat where cat.Catid=‘1’那么 select * from cat cat where 这里后台已经帮你完成,你需要做的就是把条件完成,如果没有条件则为空.
Query Query = connectionManage.createQuery(“cat. Catid=’1’ ”);


   Query.hasNext()的作用相当于resultset.next()查看是否还存在记录,Query.next()返回一个对象数组这里如果activity的是多个对象,那么objects里会顺序的存储相应的对象实例,使用的时候强制转化就可以了。
while (Query.hasNext()) {
      Object[] objects = Query.next();
      Cat cat = (Cat) objects[0];
  }

使用完毕,释放使用的数据库资源
 connectionManage.close();

l新增方式:
  由于没有主键自动生成,因此主键暂时只能由自己来维护,要保证catid为111的在表里不存在,否则会出现异常。
Void testInsert() throws Exception{
Cat cat = new Cat();
cat. setCatId(“111”);
    cat. SetSex(“F”);
    cat. setName(“catm”);
    ConnectionManage cm = new ConnectionManage();
    cm.create(cat);
    cm.commit();
cm.close();
}

l更新方式:
表里已经存在catid为111的猫,否则查不到这条记录就更新不了信息
Void testUpdate() throws Exception{
Cat cat = new Cat();
cat. setCatId(“111”);
    cat. SetSex(“F”);
    cat. setName(“catmm”);
    ConnectionManage cm = new ConnectionManage();
    cm.update(cat);
    cm.commit();
cm.close();
}

l删除方式:
删除方式比较简单,只要给出对象,并且主键值不为空,就可以删除表中记录。
Void testDelete() throws Exception{
Cat cat = new Cat();
cat. setCatId(“111”);
    ConnectionManage cm = new ConnectionManage();
    cm.delete(cat);
    cm.commit();
cm.close();
}

posted on 2005-09-15 23:41 ceaboat 阅读(417) 评论(0)  编辑  收藏 所属分类: JAVA小结

只有注册用户登录后才能发表评论。


网站导航: