目前,我有十个不同的查询通过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;
}
第一种方法是每个查询每个索引一个静态最终结果 第二个是每个查询的枚举 第三个是每个查询的类。
保持这种纯粹和可维护的上述或任何其他见解可用。
答案 0 :(得分:0)
我喜欢使用enum
。它们增加了灵活性例如,可以提供序数值和列的名称。按名称而不是按顺序检索应该使事情更加健壮。对于像SELECT *
这样的查询也会更安全。使用enum
,可以更轻松地关联更多信息,例如type
信息。很高兴根据表元数据生成这些类。
我倾向于使用enum
作为服务类的私有成员,该服务类对表,视图或存储过程进行操作。它仅在内部用于执行从关系结构到结果bean的映射。关系结构不需要在外部暴露,因此enum
也不是。对同一底层结构的多个相关查询重用相同的enum
也很好。在您的示例中,enum
应包含表的所有列,不同的查询将使用全部或部分列。通过名字去的另一个原因比通过索引更好。