📜  Java程序在JDBC中加入多个表的内容并显示(1)

📅  最后修改于: 2023-12-03 15:16:37.553000             🧑  作者: Mango

Java程序在JDBC中加入多个表的内容并显示
JDBC 简介

Java Database Connectivity(JDBC)是 Java SE 的一个标准 API,它提供了一种方法来访问不同类型的数据库,例如 MySQL,Oracle,PostgreSQL 等等。使用 JDBC,您可以连接和操作数据库,并能够通过 Java 应用程序访问您的数据。本文将介绍如何使用 JDBC 连接数据库并显示多个表的内容。

前置条件

要能够完成本文的演示,您需要:

  1. 熟悉 Java 编程语言;
  2. 安装并配置好 JDBC 驱动程序。这里演示使用 MySQL 数据库,并选择了 MySQL Connector/J 驱动程序。您可以在 MySQL 官网下载安装包:https://dev.mysql.com/downloads/connector/j/
  3. 有可用的 MySQL 数据库,其中包含多个表。
连接数据库

JDBC 连接数据库的方式和原生 SQL 连接类似:设置连接字符串、用户名和密码等。下面是通过 JDBC 连接 MySQL 数据库的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcSample {
    public static void main(String[] args) {
        // 设置连接字符串、用户名和密码
        String url = "jdbc:mysql://localhost/mydatabase";
        String user = "myusername";
        String password = "mypassword";

        try {
            // 加载 MySQL 驱动程序
            Class.forName("com.mysql.jdbc.Driver");

            // 建立连接
            Connection connection = DriverManager.getConnection(url, user, password);

            // 关闭连接
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们设置连接字符串为 "jdbc:mysql://localhost/mydatabase",它使用了 MySQL 的默认端口 3306。如果您使用了不同的端口,需要将连接字符串中的端口号改为正确的值,例如 "jdbc:mysql://localhost:1234/mydatabase"。用户名和密码是数据库的凭证,可以按您的实际情况进行修改。在 try 块中,我们首先加载 MySQL 驱动程序(实际上是通过 Class.forName() 方法来加载驱动程序类),然后建立与数据库的连接 Connection,最后关闭连接(在 finally 块中)。如果建立连接或关闭连接时发生了异常,我们将通过 catch 块来捕获并打印出异常信息。

查询多个表

要查询多个表,我们需要使用 SQL 语句的 JOIN 操作符。JOIN 操作符用于根据两个或多个表中的列之间的关系,从这些表中获取数据。在本文中,我们将使用 INNER JOIN,它返回两个表中符合指定条件的所有行。具体的 SQL 语法如下:

SELECT column_name1, column_name2, ...
FROM table_name1
INNER JOIN table_name2 ON table_name1.column_name = table_name2.column_name

其中,column_name1、column_name2、... 是我们想要显示的列名,table_name1、table_name2 是我们要连接的表名,column_name 是用于连接两个表的列名。如果我们要连接三个表,可以使用类似的语法:

SELECT column_name1, column_name2, ...
FROM table_name1
INNER JOIN table_name2 ON table_name1.column_name = table_name2.column_name
INNER JOIN table_name3 ON table_name2.column_name = table_name3.column_name

下面是演示如何使用 JDBC 查询多个表的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcSample {
    public static void main(String[] args) {
        // 设置连接字符串、用户名和密码
        String url = "jdbc:mysql://localhost/mydatabase";
        String user = "myusername";
        String password = "mypassword";

        try {
            // 加载 MySQL 驱动程序
            Class.forName("com.mysql.jdbc.Driver");

            // 建立连接
            Connection connection = DriverManager.getConnection(url, user, password);

            // 创建 Statement 对象
            Statement statement = connection.createStatement();

            // 执行 SQL 查询语句
            String sql = "SELECT customers.customer_name, orders.order_date, order_items.product_name, order_items.quantity " +
                         "FROM customers " +
                         "INNER JOIN orders ON customers.customer_id = orders.customer_id " +
                         "INNER JOIN order_items ON orders.order_id = order_items.order_id";
            ResultSet resultSet = statement.executeQuery(sql);

            // 打印查询结果
            while (resultSet.next()) {
                String customerName = resultSet.getString("customer_name");
                String orderDate = resultSet.getString("order_date");
                String productName = resultSet.getString("product_name");
                int quantity = resultSet.getInt("quantity");
                System.out.println("Customer: " + customerName + ", Order date: " + orderDate + ", Product: " + productName + ", Quantity: " + quantity);
            }

            // 关闭结果集、Statement 和连接
            resultSet.close();
            statement.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们使用了三个表:customers、orders 和 order_items。我们希望显示每个订单(order)中每种商品(product)的购买数量(quantity)以及对应的客户(customer)和订单日期(order date)。我们通过 INNER JOIN 将三个表连接起来,并在 SELECT 子句中指定要显示的列名。执行 SQL 查询语句后,我们通过 ResultSet 对象遍历查询结果,并使用 getString() 和 getInt() 等方法获取每个列的值。注意,列名要与 SELECT 子句中指定的名称相匹配。最后,我们关闭结果集、Statement 和连接,以释放资源。