Java 基于索引检索的结果集和常量声明的设计考虑

Java 基于索引检索的结果集和常量声明的设计考虑,java,sql,Java,Sql,目前,我有十个不同的查询,它们通过JDBC处理,并封装在返回结果集的函数中。这些ResultSet对象中的每一个都由外部程序迭代,并将通过它们的索引而不是每个需求的列名进行访问。我有三种方法,我正在考虑和寻找如何处理这一问题的当前最佳实践,同时尽可能接近纯OO设计。现在,我的模式如下所示: create table Cats ( name varchar2, age number, length number, location varchar2,

目前,我有十个不同的查询,它们通过JDBC处理,并封装在返回结果集的函数中。这些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.getXXXindex访问这些属性的方法

详情如下:

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

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

以上哪一项或任何其他洞察都可以保持这个纯净和可维护性。

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

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

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

      private ResultSet results;
 }