【问题标题】:Java Setters and Getters Data into the Java DatabaseJava Setter 和 Getter 数据到 Java 数据库
【发布时间】:2012-02-21 20:38:31
【问题描述】:

我正在开发一个独立的 Java 项目(不是 Java EE),我目前正在学习 JDBC,我正在创建一个数据库,其中包含员工信息,例如个人信息、联系信息、员工信息和税务信息,所有这些都是相互引用的类,并且它们具有设置器和获取器,我想知道如何将它们的数据值插入到我在数据库中创建的数据库/表中?简而言之,我有一个像这样的员工对象

Employee(PersonalInformation information,ContactInformation cInformation)

类似的,我如何将他们的数据添加到我在数据库中创建的表中?

【问题讨论】:

标签: java sql database jdbc getter-setter


【解决方案1】:

如何将他们的数据添加到我在数据库中创建的表中?

通过使用 JDBC 向数据库发送 INSERT 语句,对象图中的每个对象一个(假设每个类有一个表)。

是的,这是很多无聊、重复的代码要编写,很可能包含错误和相当大的维护负担。

这就是为什么人们像 Hibernate 一样编写Object-Relational mappers,并且有一个称为 JPA 的 Java 标准。这是 Java EE 的一部分,但这并不意味着您必须运行 Java EE 服务器才能使用它。

更新:好的,所以你不能使用 ORM,可能是因为你应该先了解 JDBC 是如何工作的,这是有道理的,因为 ORM 是基于 JDBC 的,有时你必须向下出现问题时到那个水平。

直接使用 JDBC 时,您通常会创建一个 DAO (data ccess object) 层,该层负责将对象写入数据库或从数据库读取对象。为了处理嵌套对象,一个 DAO 可以调用另一个。

不,DAO 不会在 setter 和 getter 中调用。由应用程序中对用户输入做出反应的部分调用。例如。当用户打开应用程序并且开始屏幕显示员工列表时,您将调用 EmployeeDAO.findAll() 方法,当用户对员工进行更改并单击“保存”时,您将调用 EmployeeDAO.save()方法。

【讨论】:

  • 所以在setter和getter里面有一个INSERT语句???我们的导师禁止我们使用 ORM/映射。我不知道为什么
  • 是的,我每个班级都在桌子上
  • 你能举个例子吗?我有点困惑
  • @KyelJmD :这是我能在短时间内找到的最好的一个:balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html 特别注意 UserDAO 类。
  • @KyelJmD:当然。唯一需要服务器的是连接池,但这是可选的(而且实际上只对服务器很重要)。
【解决方案2】:

我推荐你看看 Spring 的 JdbcTemplate (http://www.java2s.com/Code/Java/Spring/ControlParameterTypeInJdbcTemplateQuery.htm)

它看起来像这样:

SingleConnectionDataSource ds = new SingleConnectionDataSource();
ds.setDriverClassName("org.hsqldb.jdbcDriver");
ds.setUrl("jdbc:hsqldb:data/tutorial");
ds.setUsername("sa");
ds.setPassword("");

JdbcTemplate jt = new JdbcTemplate(ds);
jt.execute("insert into employee (id, name) values (?, ?)", 1, "Tom");

每个 DAO 类实例使用一个 jdbcTemplate。

【讨论】:

  • 正如你所说,我们不允许使用 Mapping 或任何 ORM
【解决方案3】:

这可能对你有帮助

  • 将所有必需的值传递给相应的对象。
  • 获取它们的所有值并使用这些值构建查询,例如

     Employee em = new Employee(perinfo, continfo);
     String emp_per_info = em.getSomeInfo();   // it this returns a string
     ...
     //so on
     query="insert into table_name values(variables go here);"
    

    如果它不起作用,请告诉我

【讨论】:

  • 好的,UI 可以吗?如果我要创建一个用户界面?有吗?
  • 是的,我已经完成了..带有动画....它是独立的,用于维护学生记录。
  • em.getSomeINfo() soo 对于每个属性,它会有那个??我猜那会很长
  • 但是如果呢?我想创建另一个对象?我可以覆盖以前的对象吗?你能给我举个例子吗?顺便说一句,我将在 GUI 上工作,所以如果我想添加多个用户/员工,我不知道如何创建这些对象
【解决方案4】:

您正在尝试做的事情称为“对象到关系映射”。您有构成对象域的 java 对象,还有构成关系模型的 DB 表。你已经把它们联系起来了。保存数据并查询以取回它们。 您有两种方法来编写一种您自己的有限框架或使用现有框架。现有框架包括:

  • 休眠
  • iBatis 等等。

要自己做一个,最简单的方法是将简单的结果集写入对象映射器并创建插入字符串。 我建议您研究一些 ORM 文档以了解更多信息。 问候

【讨论】:

  • 你能提供一个非常简单的例子吗?假设我有每个对象的表,但没有映射,我将如何具体做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 2020-06-14
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多