1

目前,我有十个不同的查询,它们通过 JDBC 处理,并包装在返回 ResultSet 的函数中。这些 ResultSet 对象中的每一个都由外部程序迭代,并将通过它们的索引而不是每个需求的列名来访问。我正在考虑三种方法,并且正在寻找当前的最佳实践来处理这个问题,同时尽可能接近纯 OO 设计。现在我的架构如下所示:

create table Cats
(  
    name varchar2,
    age number,
    length number,  
    location varchar2,
    isStray varchar2
); 

我的两个查询是这样的:

 public ResultSet getAllCats()  
{  
    Select * from Cats;  
}  

public ResultSet getCatAgeAndName(){
    Select cat.age,cat.name from Cats cat
}

现在我考虑通过以下方式访问这些属性的方法ResultSet.getXXX(index);

如下面所述:

public static final int GET_CAT_AGE_AND_NAME_AGE_INDEX = 1;   
public static final int GET_CAT_AGE_AND_NAME_NAME_INDEX = 2;   

或者

public enum GetCatAgeAndNamePosition  
   {  
      AGE(1),
      NAME(2);
   }

或者

 public class GetCatAgeAndNameQuery  
 {  
      public enum Position  
      {  
           AGE(1),
            NAME(2);
      }  

      private ResultSet results;
 }  

第一种方法是每个查询每个索引一个静态最终结果。
第二个是每个查询的枚举。
第三个是每个查询一个类。

上述哪一项或任何其他保持这种纯粹性和可维护性的见解是可用的。

4

1 回答 1

0

我喜欢用enums。它们增加了灵活性。例如,可以同时提供序数值和列名。按名称而不是按序号检索应该使事情更加健壮。对于像SELECT *. 使用enum,更容易关联更多信息,例如type信息。很高兴根据表元数据生成这些类。

我倾向于将其enum作为对表、视图或存储过程进行操作的服务类的私有成员。它仅在内部用于执行从关系结构到结果 bean 的映射。关系结构不需要对外暴露,所以enum. enum对同一底层结构上的多个相关查询重用相同也是很好的。在您的示例中,enum应该具有表的所有列,并且不同的查询将使用所有或部分列。按名称查找比按索引查找更好的另一个原因。

于 2012-09-07T14:06:58.587 回答