Java JDBC - ResultSet和封装。许多领域,太多的二传手和吸气者需要管理。有更好的技术吗?

时间:2014-05-08 22:02:49

标签: java database jdbc encapsulation setter

我正在编写一个java程序,它读取数据库文件并使用JDBC和ResultSet在gui屏幕上显示记录。数据库文件有数百个字段。这意味着如果我在两个类文件中分离gui和数据库处理并使用封装,我最终会得到数百个setter和getter方法(每个字段一个)。有没有更好的方法呢?

请注意,我已经为此目的使用了setter和getter,并发现它很难管理。我也看过一些文章,主张避免完全使用setter和getter,但没有找到这种技术用于数据库管理的具体例子。

谢谢,感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

一种方法是将每一行存储到Map

为此,您可以使用ResultSetMetaData(key =列名)检索列名,或者只使用列索引(key = index)检索列值。 ResultSet可以双向处理。

然后,您的结果将看起来像List<Map>结构。

答案 1 :(得分:0)

如上所述,如果您的数据库确实有数百个字段,那么在设计过程中出现了问题。

在这种情况下,我会做/建议的是 - 尝试对数据库中的任何内容进行分类。例如,假设您有这些列

ID | FirstName | MiddleName | Surname | Gender | Age | HairColor | EyeColor | BuildingNO | StreetName | City | State | PostCode | Country | CarMake | CarPlate | etc...

我会为Person,Address,Car创建一个类,并在这些类中放置查询,这些类将从与该特定对象相关的数据库中提取信息。

所以在Person类我会有这样的东西

public class Person {
   private FirstName;
   private MiddleName;
   private Surname; 

   appropriate query here and plug the whole object into a list - so you will end up with a List of Objects 'Person' with relevant data in it. 
   /* Setters and Getters */

其他类地址相同

public class Address {


public class Car {

希望你明白我的意思

答案 2 :(得分:0)

我已经按照Leo的建议实施了地图策略。认为这不是一致的解决方案,我可以立即使用,我认为这是一个非常好的选择。它不仅允许消除过多的setter和getter,而且还可以创建ArrayList(或任何其他集合)来动态保存每个字段。无需知道每个列表的实例名称,因为您可以通过Map的密钥(key =列名称)访问它们,因此无需为每个字段编写列表代码。我真的认为这是一个主要优势。然后可以将每个字段直接迭代到字符串(或任何其他类型),使代码更精简。

例如:

类LoadBigFile连接到数据库并将文件的内容加载到地图。

这样的事情(请注意:这只是一个非常模糊的例子来说明可以做些什么):

    Class LoadBigFile{

       private HashMap<String, ArrayList<String>> filemap = new HashMap<String,ArrayList<String>>();

       ////// ...Code to connect to database and load the file contents into the map

       ////// Setter and getter for the map:

       public void setFileMap(HashMap<String, ArrayList<String>> filemap){this.filemap=filemap;}
       public HashMap<String, ArrayList<String>> getFileMap(){return this.filemap;}

    }

然后在课堂上你将使用数据(解包地图):

      LoadBigFile loadBigFile = new LoadBigFile();
      String customer = loadBigFile.getFileMap().get("CUSTOMER").get(iterator));

注意:我不会通过迭代器,因为它不合适主题。我只能说它有效。

即使我还在考虑其他技术,例如ORM和JPA,我会尝试使用地图方法,因为我会发展自己的技能并学习更复杂的方法。

谢谢大家。我希望这个问题可以帮助其他java爱好者。