【问题标题】:How to store Java Objects in JavaDB Derby Database?如何在 JavaDB Derby 数据库中存储 Java 对象?
【发布时间】:2015-02-09 13:27:00
【问题描述】:

我有一个 java 类来存储电影/电视/DVD 索引的媒体对象。我打算尝试将这些对象存储在 JavaDB 数据库中。它将有成千上万的条目。

我读过关于序列化对象的文章,也读过一些关于休眠和持久性 API 的文章,虽然我并不真正了解它们是如何工作的。我只是对我应该学习如何做感到困惑。我应该担心这些,还是只用 VARCHAR 列中的所有信息制作一个表?

谁能给我任何关于他们将使用什么系统将所有这些信息存储到数据库中的提示?或者也许只是一些关于你会做什么的一般性指示,为什么?

显然我是数据库新手。我刚刚完成this codejava tutorial 并且可以成功创建/连接到JavaDB 数据库。

谢谢!

public class Media {

    File file_location;
    String filename;
    Date date;
    int hres;
    int vres;
    boolean has_tbn;
    File tbnloc;
    boolean has_ss;
    File ssloc;
    int length;
    String[] actors;
    String[] tags;
    boolean HD;
    long filesize;
    String md5 = "origMD5";

    Media(File thefile) {
        this.file_location = thefile;
    }

    Media(String thefile) {
        this.file_location = new File(thefile);
    }
// snipped getters and setters
}

【问题讨论】:

  • 您不认为您可能想要搜索此对象的某些部分,例如演员或长度吗?如果它在单个对象中(可能是 BLOB),那么您将无法搜索,那么使用 DB 有什么意义呢?
  • 是的,我确实想搜索零件,这就是我问这个问题的原因。我想我需要以某种方式将演员/标签信息存储在链接表中,这样我就可以搜索某个演员的电影等。
  • @BryanPendleton CLOB 和 BLOB 听起来不像我需要的,它们的内容无法搜索。
  • @BryanPendleton 哦,现在我想我明白你为什么提出这些建议了,我不想将实际媒体存储在数据库中,只是链接到文件位置。

标签: java database jdbc derby javadb


【解决方案1】:

ORM - 对象关系映射是 Hibernate 和其他框架用于将数据存储到数据库中的概念。这是一个让您的数据更容易持久化的选项。

使用 Hibernate 框架让您有机会将数据库行视为对象本身(媒体对象),该行的列是媒体​​对象字段。通过使用 Pojo 类,您可以访问所有这些字段并根据需要设置/获取字段,并且使用 Hibernate API 您可以将对象持久保存到数据库中。

根据这个概念,您可以选择使用 Hibernate Framework 或使用默认 JDBC。

你可以在这里找到关于休眠的一个很好的教程:http://www.tutorialspoint.com/hibernate/index.htm

【讨论】:

  • 可能没有实际意义,因为它只有几千个项目,但与直接数据库表相比,使用它会不会影响性能,例如搜索匹配多个参与者/标签的文件?
  • jdbc 提供了更好的性能。对于结论,如果您正在寻找性能,请查看以下示例:phpdao.com/hibernate_vs_jdbc
  • 我现在正在阅读该教程,到目前为止似乎非常容易理解并且写得很好。 Hibernate 听起来确实是我正在寻找的东西。谢谢。
【解决方案2】:

我将借此机会说一些可能会引起争议的事情:您的 Media 类似乎不是程序中操作的良好抽象。相反,它似乎只是数据的集合。您需要 getter 和 setter(对于所有?)成员这一事实也指向了这个方向。

这是我的(有争议的)建议:不要试图将 Media 变成一个对象,而实际上它并非如此。只需为您的数据创建一个 ER(实体关系)模型,然后创建数据库表来匹配。然后找出您需要/想要支持的查询并创建必要的索引以加快速度。然后在您的应用程序中创建类/对象以支持查询/操作。

您的程序对象应该模拟在许多 OO 文献中如此流行的现实世界对象的想法在恕我直言是完全错误的,除非您的程序可能是一种模拟。但是 99% 的程序都不是,它们需要支持它们实际工作的对象(数据+操作)。这通常类似于从数据库中获取数据,将其复制到 gui 模型中,然后重新显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2016-07-18
    • 1970-01-01
    • 2010-10-15
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多