繁体   English   中英

如何使用 JDBC/Java 访问和显示 MySQL 关系数据库中的特定记录?

[英]How do I access and display specific records in a MySQL relational-database using JDBC/Java?

我有一个项目管理系统,用于从文本文件中读取数据,但现在已更改为从数据库中读取数据。

我想弄清楚如何根据项目表中的项目编号在不同的表中显示特定信息。 我的数据库中的所有表都与这个项目表相关。

我的数据库的可视化展示

我的数据库的 ERD: 我的数据库的 ERD

我的问题

整齐地显示项目的所有信息。

我想弄清楚的是,如何根据我的项目表中的外键在一个表中获取特定记录?

例如,如果一个项目的建筑师的名字为“Bryan”,那么我如何仅显示“Bryan”的建筑师详细信息?

我的 displayAll 方法的代码

public static void viewAllProjects() {

    // Calling the 'connectionAttempt' method to connect to the 'ebookstore' database.
    Connection connection = connectionAttempt();

    PreparedStatement ps;

    // Using a try- catch block to print the data for a specific record in the 'books' table.
    try {
        // Creating and using a normal statement to select the specific record in the database.
        Statement statement = connection.createStatement();

        // SQL select statement
        String q = "select * from architect\n" +
                "union all\n" +
                "select * from contractor\n" +
                "union all\n" +
                "select * from customer" +
                "union all\n" +
                "select * from shopping_basket\n" +
                "union all\n" +
                "select * from projects\n" +
                "union all\n" +
                "select * from building_info";

        ResultSet rs = statement.executeQuery(q); // Executing statement

        // Printing ResultSet
        if (rs.next()) {
            String projectDetails = "\nProject Number: " + rs.getString("project_number") + "\n" +
                    "Project Name: " + rs.getString("project_name") + "\n" +
                    "Type of building: " + rs.getString("HERE") + "\n" +
                    "ERF Number: " + rs.getString("HERE") + "\n" +
                    "Physical Address: " + rs.getString("physical_address") + "\n" +
                    "Total fee charged for project: " + rs.getString("HERE") + "\n" +
                    "Total amount already paid: " + rs.getString("HERE") + "\n" +
                    "Deadline of the project: " + rs.getString("deadline") + "\n" +
                    "Project Finalised: " + rs.getString("finalised") + "\n" +

                    "\nArchitect Name: " + rs.getString("architect_name") + "\n" +
                    "Architect Telephone Number: " + rs.getString("id") + "\n" +
                    "Architect Email-Address: " + rs.getString("id") + "\n" +
                    "Architect Physical Address: " + rs.getString("id") + "\n" +

                    "\nContractor Name: " + rs.getString("contractor_name") + "\n" +
                    "Contractor Telephone Number: " + rs.getString("id") + "\n" +
                    "Contractor Email-Address: " + rs.getString("id") + "\n" +
                    "Contractor Physical Address: " + rs.getString("id") + "\n" +

                    "\nCustomer Name: " + rs.getString("HERE") + "\n" +
                    "Customer Telephone Number: " + rs.getString("HERE") + "\n" +
                    "Customer Email-Address: " + rs.getString("HERE") + "\n" +
                    "Customer Physical Address: " + rs.getString("HERE") + "\n" +
                    "----------------------------------\n";

            System.out.println(projectDetails);
        } else {
            System.out.println("Record Not Found...");
        }
        connection.close();
    } catch (Exception e) {
        System.out.println(e);
    }
}

我的connectionAttempt方法代码有效,就像我以前使用的那样。

如果我可以提供任何其他详细信息,请告诉我。

在你学习 SQL 之前,这个项目不会成功。 一旦你这样做了,你就会知道将整个数据库中的每一行联合在一起是一种疯狂的工作方式。 这试图以一种非常低效的方式抽取数据库中的所有数据。

如果一个项目的架构师名称为“Bryan”,那么我如何仅显示“Bryan”的架构师详细信息。

一条 SQL 语句类似于SELECT * FROM architect WHERE architect_name = ? (将其ps.setString(1, "The name of the architect goes here"); PreparedStatement ),然后使用ps.setString(1, "The name of the architect goes here"); 设置查询参数,然后运行它,瞧。

您可能希望将返回的数据“编组”到一个专门表示返回数据的专用 java 对象中,因为使用某些 java rs.getString...运行大量rs.getString...样式语句要简单得多。 稍后再谈。

如果您想要 brian 制作的所有项目,那么除非您向我们解释您的数据库是如何设计的,否则无法确定。 但它看起来类似于:

SELECT p.* FROM projects p
  INNER JOIN architect a ON p.architect = a.unid
  WHERE a.architect_name = ?

您需要了解 SQL - 在网络上搜索任何 SQL 教程。

您还需要从 Java 端与它进行交互。 您目前正在使用原始 JDBC - 不推荐。 阅读上JDBI或者如果你愿意, JOOQ 这也使该编组的事情简单了很多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM