gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:08:51 26 4
gpt4 key购买 nike

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

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。
第二个是每个查询的枚举。
第三个是每个查询一个类。

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

最佳答案

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

我倾向于将enum作为对表、 View 或存储过程进行操作的服务类的私有(private)成员。它仅在内部用于执行从关系结构到结果 bean 的映射。关系结构不需要对外公开,​​enum 也不需要。对于同一底层结构上的多个相关查询重用相同的枚举也很好。在您的示例中,enum 应包含表的所有列,并且不同的查询将使用全部或部分列。按名称比按索引更好的另一个原因。

关于java - 围绕 ResultSet 和基于索引的检索的常量声明的设计考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com