📅  最后修改于: 2023-12-03 15:16:37.553000             🧑  作者: Mango
Java Database Connectivity(JDBC)是 Java SE 的一个标准 API,它提供了一种方法来访问不同类型的数据库,例如 MySQL,Oracle,PostgreSQL 等等。使用 JDBC,您可以连接和操作数据库,并能够通过 Java 应用程序访问您的数据。本文将介绍如何使用 JDBC 连接数据库并显示多个表的内容。
要能够完成本文的演示,您需要:
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 和连接,以释放资源。