围绕ResultSet的设计考虑和基于索引的检索的常量声明

时间:2012-09-07 13:02:12

标签: java sql

目前,我有十个不同的查询通过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;   

OR

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

OR

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

      private ResultSet results;
 }  

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

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

1 个答案:

答案 0 :(得分:0)

我喜欢使用enum。它们增加了灵活性例如,可以提供序数值和列的名称。按名称而不是按顺序检索应该使事情更加健壮。对于像SELECT *这样的查询也会更安全。使用enum,可以更轻松地关联更多信息,例如type信息。很高兴根据表元数据生成这些类。

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