跳到主要内容

Java JDBC

一个简单的 JDBC 示例

MySQL 服务启动、建库建表、写入数据,通过 JDBC 连接 MySQL 数据库

信息

示例代码:code/learn-java/com.xzp.demo.jdbcs

什么是 JDBC?

JDBC(Java Database Connectivity)是一种用于在 Java 应用程序和数据库之间通信的API。它是 Java SE 平台的一部分,提供了一种标准的 Java 方法来访问各种类型的数据库,下边我们来通过实践去学习如何使用 JDBC。

JDBC 实战

Mac 启动 Brew 安装的 MySQL:

# 检查是否有mysql服务
brew services list

# 启动mysql服务
brew services start mysql

# 停止mysql服务
brew services stop mysql

# 连接mysql,输入密码
mysql -u root -p

创建数据库:

CREATE DATABASE 数据库名;

选中数据库:

USE database_name;

建表 SQL:

CREATE TABLE `user` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名',
`age` int DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

填入数据:

INSERT INTO `user` (`id`, `name`, `age`) VALUES  (1, 'user1', 11);
INSERT INTO `user` (`id`, `name`, `age`) VALUES (2, 'user2', 19);
INSERT INTO `user` (`id`, `name`, `age`) VALUES (3, 'user3', 16);

检查:

select * from user;

在 Java 中引入 JDBC 依赖

在 Java 中使用 JDBC 操作数据库需要引入 JDBC 的 jar 包,这是因为 JDBC 是一个独立于平台的API,不随 Java 环境自带,所以需要手动引入 jar 包。引入 jar 包后,Java 程序就可以通过 JDBC 来连接、操作数据库了。

MySQL JDBC 下载地址:https://dev.mysql.com/downloads/connector/j/

引入 JDBC 的 jar 包有两种方式:

  • 手动添加 IDEA 添加 jar 包(见下)
    • 具体操作:在项目中创建 lib 目录,把 jar 包复制到 lib 目录下,然后在 IDE 中右键点击相关 jar 包,选择 Add as Library 选项,将 jar 包添加到项目中
  • 使用依赖管理添加 jar
    • 具体操作:直接在 IDE 中使用 Maven 等 build 工具,引入对应的 jdbc 的 jar 包的依赖
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>

IDEA 添加 jar 包:

JDBC 实战示例

某软件公司的客户信息保存在一个MySql数据库中。公司需要一个程序来管理客户信息。本程序需要实现以下功能:

  1. 查询所有客户的信息并打印出来
  2. 根据客户ID查询客户信息并打印出来
  3. 添加客户信息
  4. 修改客户信息
  5. 删除客户信息

示例:

import java.sql.*;

public class MySQLDemo {

private static Connection conn;
private static Statement stmt;

static {
//加载驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接(注意这里要改为自己的数据库和用户名密码)
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
//创建Statement对象
stmt = conn.createStatement();
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}

public static void deleteOne(int id) throws SQLException {
String sql = "delete from user where id=" + id;
int result = stmt.executeUpdate(sql);
if (result > 0) {
System.out.println("删除成功");
}
}

public static void updateOne(int age, int id) throws SQLException {
String sql = "update user set age=" + age + " where id=" + id;
int result = stmt.executeUpdate(sql);
if (result > 0) {
System.out.println("修改成功");
}
}

public static void insertOne(int id, String name, int age) throws SQLException {
String sql = "insert into user(id,name,age) values(" + id + ", '" + name + "', " + age + ")";
int result = stmt.executeUpdate(sql);
if (result > 0) {
System.out.println("添加成功");
}
}


public static void queryById(int id) throws SQLException {
String queryAllSql = "select * from user where id=" + id;
ResultSet rs = stmt.executeQuery(queryAllSql);
boolean isMatch = false;
while (rs.next()) {
isMatch = true;
System.out.println("id: " + rs.getInt("id")
+ " name: " + rs.getString("name")
+ " age: " + rs.getInt("age"));
}
if (!isMatch) {
System.out.println("数据查询为空");
}
}

public static void queryAllUser() throws SQLException {
String sql = "select * from user";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println("id: " + rs.getInt("id")
+ " name: " + rs.getString("name")
+ " age: " + rs.getInt("age"));
}
}

public static void main(String[] args) throws SQLException {
queryAllUser();
insertOne(4, "user4", 20);
queryById(4);
updateOne(33, 4);
queryById(4);
deleteOne(4);
queryById(4);
}
}

总结

JDBC API 提供了一套标准的接口和类,以帮助开发人员使用 Java 与数据库进行通信。这些类和接口包括:

  • DriverManager 类:该类为应用程序提供了一个标准的接口,以便连接到一个或多个数据库。它还提供了一组静态方法,以注册和注销驱动程序
  • Connection 接口:该接口表示与数据库的连接。可以使用此接口执行各种数据库操作
  • Statement 接口:该接口表示可以执行在数据库中执行的 SQL 语句。可以使用此接口执行各种操作,如查询、插入、更新和删除数据
  • ResultSet 接口:该接口表示查询结果集。可使用此接口从数据库中检索查询结果
  • PreparedStatement 接口::该接口继承了 Statement 接口,并提供了更高效和安全的SQL语句执行功能。使用此接口可以预编译SQL语句

参考