【问题标题】:How to implement database functionality effectively?如何有效实现数据库功能?
【发布时间】:2010-01-19 09:42:31
【问题描述】:

我正在开发一个使用 MySQL 数据库的 Java 桌面应用程序。数据库有 6 个表。像往常一样,每个表都应该允许 CRUD(创建、读取、更新和删除)操作。

我为每个表设计了 6*4 = 24 个 JPanel,4 个 JPanel。每个 JPanel 都有组件来获取用户输入并执行其设计的 CRUD 操作。例如,JPanel3 是为 Table1 的 Create 操作而设计的。

现在我想知道以下内容:

Q1. 编写 24 个函数,每个函数针对特定表执行特定函数会更好吗?

Q2. 这种情况很正常,因为每个应用程序一般都有很多表。那么,所有这些应用程序是否都使用这种为每个表的每个操作编写每个函数的方法?

Q3.由于是Swing应用,每次CRUD操作都需要连接数据库,所以用户启动应用时连接数据库会不会更好?

在用户点击“保存”或“编辑”或“删除”或“创建”按钮时建立数据库连接会更好吗?

Q4. 最好从所有 24 个函数共享的实例变量中引用连接?还是让每个函数都有自己的连接会更好?

也欢迎任何其他建议。

【问题讨论】:

    标签: java mysql database swing


    【解决方案1】:

    请参阅this article 了解 DAO 模式,然后 请参阅Don't repeat the DAO! article,以便您制作通用的、可重用的 DAO。

    简而言之 - 将您的数据库访问功能包装在一个类中并在任何地方重用该类,从而有效地使您的应用程序不显式依赖于数据库操作 - 仅依赖于 DAO 类(接口)。

    【讨论】:

      【解决方案2】:

      A1. 不。设计应该以需求和领域逻辑为指导,而不是技术考虑。通常,让用户对每个表单独访问所有 CRUD 操作是没有意义的。编写函数来一起执行那些属于一起的操作。

      A2. 不。现在,大多数应用程序都使用对象/关系映射器,例如 Hibernate 来处理这类事情。但是,顶部应该有应用程序逻辑一起执行相关操作。

      A3/4. 使用DB connection pool。 O/R 映射器通常会自动执行此操作。

      【讨论】:

        【解决方案3】:

        如果你能和有经验的人一起参加一个项目,那就太好了。你的问题是可以理解的,但是......大多数项目已经有了解决方案。

        我相信问题比你描述的要多得多,你可以工作几个月来发现问题 ;-)

        您可能需要很多建议,我们甚至无法开始。

        你能考虑一个像 Hibernate 这样的框架吗? 虽然学习起来会很复杂,但在这个过程(和建议)中,你会学到很多关于数据库层问题和解决方案的知识。


        但要回答你的一些问题:

        Q1:不,写 24 个函数会重复很多。

        Q2:当然不是。

        Q3:数据库连接通常会超时。我建议在适当的时候要求一个……例如在你描述的情况下。

        Q4:获取连接应该是共享代码。

        【讨论】:

          【解决方案4】:

          Q1:你可以减少 JPanel 并使用 JComboBox 让用户选择要操作的表吗?这可能会为您节省一些代码。

          Q2:在某种程度上,是的。但请参阅我对第四季度的回答。

          Q3:当用户点击时进行连接,并尽可能短地保持打开状态。数据库连接占用资源。

          Q4:如果您在一个名为 Data Access Object 的类中完成所有数据库代码并进行交互会更好,那么如果您愿意,从 MySQL 更改数据库会容易得多。见http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/

          【讨论】:

            【解决方案5】:

            应用程序做什么?

            我希望您使用的对象名称比“JPanel3”和“Table1”更具描述性?

            【讨论】:

              【解决方案6】:

              不写代码会更好。 是的!只需拖放即可。 数据验证、报告和图表。 无需编写任何代码即可创建完整的数据库程序。 常见的东西,例如新建/编辑/删除/搜索/更新。 使用 JDeveloper。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2022-11-02
                • 2014-03-31
                • 1970-01-01
                • 2015-09-14
                • 2019-09-18
                • 1970-01-01
                • 2011-07-22
                • 1970-01-01
                相关资源
                最近更新 更多