对一个ERP产品的认识(3)-------对数据库表的多表的操作

wooddoor 2002-11-01 11:21:42
这里讲的对多表的操作主要是指search()操作。因为对多表的add,delete,update等都可以分为对多个单表的操作。(对单表的操作可以看这个文章:http://www.beeship.com/bbs/dispbbs.asp?boardID=2&ID=260)
对多表的search()操作,想把数据从对几个表查找得到的结果中抽出来,并在页面上显示出来,我们是这么做的。
1.首先,做一个databean,把要查找的几个表中的数据字段都放在里面,并分别加上setXXX(),getXXX()方法。
2.写出查讯的条件如下:
String where =
。。。。。。
+ " and tblprovscus.prodsn=tblproduct.prodsn"
+ " and tblprovscus.orgsn=tblorg.orgsn";
3.先把要查讯的每个数据表的to类都告诉BasePJL这个类,然后调用BasePJL这个类的retrieveMatrix()方法。
BasePJL pjl = new BasePJL();
BaseTO[] tos = { new TblProVSCusTO(), new TblProductAITO(), new TblOrgAITO()};
//
pjl.setTOs(tos);
BaseTO[][] rv = pjl.retrieveMatrix(roll);
4.BasePJL中的retrieveMatrix()方法。
。。。。。。
StringBuffer SQL = new StringBuffer(300);
SQL.append("SELECT ");
for (int i = 0; i < TOs.length; i++) {
if (i != 0)
SQL.append(" , ");
SQL.append(getFullPathColumns(TOs[i]));
}
SQL.append(" FROM ");
for (int i = 0; i < TOs.length; i++) {
tableNames += TOs[i].TableName();
if (i != TOs.length - 1) {
tableNames += ",";
}
}
。。。。。。
上面的程序拼好了sql语句,其中的getFullPathColumns()方法是在每个表的字段名前加上自己的表名,这是因为在多表查询时,往往会有字段名重复的情况,所以这里在组合SQL语句时,需要 每个字段名具有唯一标志,这时最好的办法是每个字段名都包含表名。
rs = stmt.executeQuery(SQL.toString());
上面语句得到结果集rs.
5.从得到的结果集rs中找到每个单表中的数据。
a. BaseTO[][] set = new BaseTO[数据集的长度][ 表的数量];
set[数据集的长度] = this.fetchQueryObjects(rs);
b. this.fetchQueryObjects() 中的代码是这样写的,实例化每个表对应的to类, 然后调用单表各自的 fetchQueryObject()方法来从rs取出 各自要的数据。
//初始化所有的TO的类。
Class[] referenceClasses = new Class[TOs.length];
for (int i = 0; i < TOs.length; i++) {
referenceClasses[i] = TOs[i].getClass();
}
BaseTO[] set = new BaseTO[TOs.length];
//定义每一个PO的实例变量。
for (int i = 0; i < TOs.length; i++) {
// 通过循环实例化结果集中的每一行中的各个对象的实例。
try {
BaseTO to = (BaseTO) referenceClasses[i].newInstance();
to = to.fetchQueryObject(rs);
set[i] = to;
} catch (InstantiationException ex) {
throw new DAOException("0046", ex);
} catch (IllegalAccessException ex) {
throw new DAOException("0047", ex);
}
catch(SQLException ex){
}
}
return set;
c. 在to类中的fetchQueryObject() 的例子。
protected void fetchQueryData(java.sql.ResultSet rs) throws SQLException{

this.col_projectName = rs.getString("tblImportProject_projectName");
。。。。。。。
于是每个子表都取得了自己的数据。并都存在了set[][]中。
6. 从set[][] 中取出你要查的东西。
set[count][tos]中的count表示一共查出来的数据的条数,tos表示的就是所渉及的to的数组。
TblProVSCusTO to1 = (TblProVSCusTO) set [i][0];
TblProductAITO to2 = (TblProductAITO) set [i][1];
现在数据都在to1,to2中有了,你就可以取出来放到你自己的databean了。然后把databean传到页面,不就实现了多表的查讯吗?



...全文
74 点赞 收藏 回复
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复

还没有回复,快来抢沙发~

发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2002-11-01 11:21
社区公告
暂无公告