【问题标题】:Java and mySQL, why create class objects with data from the database?Java 和 mySQL,为什么要使用数据库中的数据创建类对象?
【发布时间】:2020-07-15 10:35:39
【问题描述】:

所以我有一个家庭作业是在使用 mySQL 数据库的同时用 Java 构建一个控制台应用程序。 我们的老师希望我们使用对象和 ArrayList,因为 Java 是一种“面向对象的语言”。

我不知道为什么我必须将 mySQL ResultSets 解析为对象,而不是直接在我的方法中以良好的 printf 格式打印它们。 同样,为什么我要在插入新数据时创建类对象,而不是直接通过我的连接更改数据库。

有人可以解释一下并指出正确的方向吗? 我不需要任何代码。只是想了解一下。

【问题讨论】:

  • 欢迎来到 Stack Overflow! :-) 家庭作业帮助是您在这里看到的典型内容。欲了解更多信息,请查看:stackoverflow.com/help/how-to-ask
  • “我不知道为什么我必须将 mySQL ResultSets 解析成对象,而不是直接打印它们” ...主要是因为在现实世界的应用程序中可能对记录做更多的事情,而不仅仅是将它们直接打印到控制台,此时将它们放入一个可以移动和轻松操作的可靠数据结构中很有用。它还可以使代码更易于维护——现实世界的应用程序通常会更新很多次。所以我想这个任务的目的可能是让你习惯使用这些结构,但又不会让总体目标变得过于复杂。
  • 感谢您的回答。我应该为数据库的每个表创建一个带有构造函数的类并将对象保存在 ArrayLists 中吗?
  • 如果没有确切地看到您正在使用的数据以及对您的确切期望,那么很难说。无论如何,很少有一种“正确”的方式来做事。关键是尝试使用您认为合适的结构,以便在数据库和用户界面之间有效地传输数据。将其视为屏幕上的内容和存储中的内容之间的中间层(在更复杂的应用程序中,它们的结构或显示方式并不总是完全相同,因此需要中间层)。

标签: java mysql oop architecture


【解决方案1】:

“我不确定为什么必须将 mySQL ResultSets 解析为对象,并且 不要以漂亮的 printf 格式直接打印它们。同样,为什么我要在插入新数据时创建类对象,而不是直接通过我的连接更改数据库。”

...主要是因为在现实世界的应用程序中,您可能会对记录做更多的事情,而不仅仅是将它们直接打印到控制台,此时将它们放入一个可靠的数据结构中很有用可以轻松移动和操作。

它还可以使代码更易于维护 - 现实世界的应用程序通常会更新和更改很多次,并且可能包含许多不同的数据类型和结构,其中一些可能是由几个其他结构组成的复杂表示放在一起 - 如果您已经有很多较小的物体可以制作它,那么构建一个复杂的物体会更容易(想象一下从现成的部分建造家具,而不是从锯所有木板并自己制作所有螺丝开始)。

您可以将其视为屏幕上的内容和存储中的内容之间的中间层 - 在更复杂的应用程序中,它们的结构或显示方式并不总是完全相同,因此需要中间层.有时显示器和存储设备甚至不在同一台计算机上(例如在这样的网站中)。

所以我想这个作业的目的可能是让您习惯使用这些结构,但又不会使总体目标过于复杂。练习的真正目的并不总是显而易见的。

【讨论】:

    【解决方案2】:

    ResultSet 的一个 printf 方法不是正确的实现方法!一个结果集可以包含不同数量的不同类型的数据。

    正确的方法是将它们解析为一个对象。对于每个表,您可能有一个自己的带有构造函数的类。例如:

    您有一个表“Person”,其中包含名称、年龄、地址等属性。然后你创建一个构造函数

    public Person(String name, int age, String address){}
    

    或者你可以创建一个静态方法来解析:

    public static Person parseFromResultSet(ResultSet r) throws ParseException {}
    

    然后您甚至可以编写自己的“PersonParseExcpetion”。

    【讨论】:

    • 因此,例如,如果我需要来自 4-5 个不同表的数据,并且我编写了一个带有几个连接的 Select 查询,我是否应该将其解析为一个对象。因为如果我解析每个表,我将只使用“SELECT *”,这违背了使用 JOINS 和更高级 DML 的目的。
    • 不,如果您想合并来自不同表的数据,JOINS 非常有用。是的,数据形式有很多可能性,但是如果某些对象匹配,则只需编写自定义对象并使用继承。只是为了澄清:您不解析表,而是解析结果集。所以处理完 SQL 语句后得到的结果。
    • 是的,是的。我的意思是结果集。因此,假设我需要 2 个表中的 ResultSet,我是否将其解析为对象并将对象保存到 ArrayList 中?或者我是否将每个表中所有数据的 ResultSets 解析为 2 个单独的对象和 Arraylists 并通过 Java 操作打印输出?最好的方法是什么?
    • 这取决于您的任务。如果您有 4 或 5 个不同的选择,则编写 5 个类(如果可能,使用继承)并将数据集解析为相应的类,以便将所有结果集数据转换为 ONE 对象。如果您有更复杂的任务并且有 100 多个不同的选择,那么您必须考虑不同的方式。一般情况下(2)无法说明任何事情。
    • 如果我的回答让您满意,请接受它以最终关闭此问题;)
    猜你喜欢
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2014-08-29
    • 2011-01-07
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多