如何用jdbc实现一对多

Posted

技术标签:

【中文标题】如何用jdbc实现一对多【英文标题】:How to implement one to many with jdbc 【发布时间】:2019-11-20 06:50:03 【问题描述】:

我正在尝试编写一个程序来管理一些客户。每个客户都有预订,每个预订都有项目。我知道我有一对多的关系,但我不知道该怎么做。

我没有使用 Spring,只有 JDBC。

没有数据库,我是这样做的:

public class Client 

    private String _fullName;
    private String _address;
    private String _email;
    private String _phoneNumber;
    private List<Reservation> _reservations;
    

public class Reservation 

    private List<Item> _items;
    private int _totalSum;
    private boolean _toDeliver;
    private String _date;

public class Item 

    //primary key.
    private int _id;
    private int _price;
    private String _name;


我必须声明这些列表吗?如果没有 Spring、Hibernate 和其他东西,是否有可能做到这一点?我只想知道如何设计我的程序。

【问题讨论】:

顺便说一句,您的成员字段无需使用前导下划线标记。现代编辑器会为您的代码着色以表明这一点。 【参考方案1】:

是的,您只需使用 JDBC 数据库驱动程序即可完成所有工作。

你要做的第一件事就是设计你的数据库,也就是你的表和约束等等。

然后您返回 Java 并使用 JDBC 查询您的数据库。

一种常见的方法是创建一个 DAO 类,您可以在其中将数据库查询与代码分离。它是这样的:

public String getUserName(String userId) throws SQLException 
    String sql = "SELECT name FROM user WHERE user_id = ?";

    try (Connection connection = getConnection();
         PreparedStatement stmt = connection.prepareStatement(sql)) 

        stmt.setString(1, userId);

        try (ResultSet rs = stmt.executeQuery()) 
            String name = rs.getString("name");
            return name;
        
    

这只是一个简单的例子,这里没有错误处理,也没有处理空查询结果,网上有更好的例子来说明如何制作DAO并创建连接。根据您运行此代码的位置,您更喜欢使用连接池来提高效率(另一件事需要阅读更多内容)。

在您的用例中,您将让 DAO 获取数据以创建您的 Item,创建一个新的 Item 并从 DAO 返回它。网上有很多这样的例子,如果您还有其他问题,请不要犹豫。

【讨论】:

首先,谢谢!!我认为我的问题是关于如何制作表格我必须向客户声明主键和他的预订的外键吗?并通过客户的钥匙,我可以访问他的预订?如果我想从文件中读取项目并将它们保存到数据库中(我实际上做了什么)并向用户显示一个菜单以选择一些项目,我是否必须在 java 中制作预订对象?或仅到达客户表并通过他的密钥添加新预订。也许我必须阅读更多关于如何做到这一点,我试图找到我的问题的例子,但我没有找到。谢谢!! 你想要做的不是我可以用一个简单的答案来回答的简单事情,你正在处理一个必须从用户(UI)收集数据,转换成数据库将接受并将其发送到数据库。这是一个多层应用程序。您必须阅读有关数据库关系、0 对 1、1 对 1、1 对多、多对 1、多对多等的更多信息。然后您将了解如何从代码,因为您将知道当用户执行某些操作时要更新哪些表。我不能从这里为你建造一切。

以上是关于如何用jdbc实现一对多的主要内容,如果未能解决你的问题,请参考以下文章

Spring JDBC中的多个一对多关系

使用 JDBC 在一对多中获取“多”

hibernate多对多 一对多 及简单入门

mybatis映射 一对一,一对多,多对多高级映射

如何使用 Java 和 JDBC 防止一对多关系中的重复?

Sqlalchemy - 一对多用户到位