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



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

第一种方法是每个查询的每个索引有一个静态的final
第二个是每个查询的枚举
第三个是每个查询一个类。

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

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

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

最新更新