沃梦达 / 编程技术 / 数据库 / 正文

JDBC 连接MySQL实例详解

JDBC是Java Database Connectivity的缩写,是一种用于执行SQL语句的Java API。通过JDBC,我们可以直接连接到各种数据库,与之交互(如执行查询、更新等操作)。

JDBC连接MySQL实例详解

什么是JDBC?

JDBC是Java Database Connectivity的缩写,是一种用于执行SQL语句的Java API。通过JDBC,我们可以直接连接到各种数据库,与之交互(如执行查询、更新等操作)。

JDBC连接MySQL的准备工作

在使用JDBC连接MySQL之前,需要先进行以下准备工作:
1. 下载MySQL的JDBC驱动(即JDBC的实现),并将其放入CLASSPATH中。我们可以在MySQL官网下载驱动,或者在Maven等仓库中获取它。下面演示的代码使用了Maven,pom.xml中需加入以下依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
  1. 创建MySQL数据库(如未创建)及数据表,并设置一个用于连接的MySQL用户及其密码。这里不再做详细介绍。

使用JDBC连接MySQL

接下来演示如何通过JDBC连接MySQL、创建表、插入、查询数据等操作。下面是一个简单的样例代码:

import java.sql.*;

public class JDBCTest {
    public static void main(String[] args) {
        try {
            // 1.加载数据库驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2.连接数据库
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/testdb",
                    "testuser",
                    "testpass");

            // 3.创建Statement
            Statement stmt = conn.createStatement();

            // 4.创建表
            String tableSql = "CREATE TABLE Employee " +
                    "(id INT not NULL, " +
                    " name VARCHAR(255), " +
                    " age INT, " +
                    " PRIMARY KEY ( id ))";
            stmt.executeUpdate(tableSql);

            // 5.插入数据
            String insertSql = "INSERT INTO Employee " +
                    "(id, name, age) " +
                    "VALUES (1, 'Tom', 20)";
            stmt.executeUpdate(insertSql);

            // 6.查询数据
            String selectSql = "SELECT id, name, age FROM Employee WHERE id=1";
            ResultSet rs = stmt.executeQuery(selectSql);
            if (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("id=" + id + ", name=" + name + ", age=" + age);
            }

            // 7.关闭资源
            rs.close();
            stmt.close();
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注:上述代码为演示使用,没有考虑异常、线程安全等问题,仅供参考。下面对代码的各个部分进行解释。

加载数据库驱动程序

JDBC是通过驱动程序来运行的,驱动程序的实现由各个数据库厂商提供。使用JDBC时,需要先加载该驱动程序。一般通过Class.forName()方法进行加载。

Class.forName("com.mysql.cj.jdbc.Driver");

上面的代码表示加载MySQL的驱动程序,使用的是MySQL Connector/J 8.0版本的驱动程序。

连接数据库

DriverManager.getConnection()方法用于创建连接。该方法需要三个参数:URL、用户名和密码。

Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/testdb",
                    "testuser",
                    "testpass");

上面的代码中URL表示连接的目标数据库,其格式为:

jdbc:mysql://[host][:port]/[database]?[properties]

其中,[host]表示主机名,[port]表示端口号(MySQL默认使用3306端口),[database]表示连接的数据库名,[properties]则表示数据库的其他配置(如连接要用到的字符集)。上面的代码连接的数据库为名为testdb的数据库,用户名为testuser,密码为testpass的用户。

创建Statement

Statement表示执行SQL语句、查询并更新数据的对象,通过连接创建即可。例如:

Statement stmt = conn.createStatement();

上述代码创建了一个Statement对象stmt,以便后续执行SQL语句。

创建表

使用SQL语句创建表:

String tableSql = "CREATE TABLE Employee " +
                    "(id INT not NULL, " +
                    " name VARCHAR(255), " +
                    " age INT, " +
                    " PRIMARY KEY ( id ))";
stmt.executeUpdate(tableSql);

上述代码表示创建了一个名为Employee的表,包含id、name、age三个字段,其中id为主键(PRIMARY KEY)。

插入数据

使用SQL语句向Employee表中插入一行数据:

String insertSql = "INSERT INTO Employee " +
                    "(id, name, age) " +
                    "VALUES (1, 'Tom', 20)";
stmt.executeUpdate(insertSql);

上述代码表示向Employee表中插入了一行数据,id为1,name为Tom,age为20。

查询数据

使用SQL语句查询Employee表中id为1的记录:

String selectSql = "SELECT id, name, age FROM Employee WHERE id=1";
ResultSet rs = stmt.executeQuery(selectSql);
if (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    int age = rs.getInt("age");
    System.out.println("id=" + id + ", name=" + name + ", age=" + age);
}

上述代码表示查询Employee表中id等于1的记录,并将查询结果输出到控制台上。

关闭资源

在使用JDBC过程中,需要注意关闭资源,释放连接。例如:

rs.close();
stmt.close();
conn.close();

上述代码依次关闭ResultSet、Statement和Connection对象,以释放与数据库的连接。

至此,我们就完成了一个简单的JDBC连接MySQL实例的操作。在实际应用中,还需要注意异常处理、资源释放、线程安全等问题。

示例说明

下面是两个使用JDBC连接MySQL的示例说明。

示例1:从MySQL数据库中读取数据,输出到控制台

import java.sql.*;

public class ReadFromDB {
    public static void main(String[] args) {
        try {
            // 1.加载数据库驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2.连接数据库
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/testdb",
                    "testuser",
                    "testpass");

            // 3.创建Statement
            Statement stmt = conn.createStatement();

            // 4.查询数据
            String selectSql = "SELECT id, name, age FROM Employee";
            ResultSet rs = stmt.executeQuery(selectSql);
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("id=" + id + ", name=" + name + ", age=" + age);
            }

            // 5.关闭资源
            rs.close();
            stmt.close();
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码演示了如何从MySQL数据库中读取Employee表中的数据,并将结果输出到控制台上。

示例2:向MySQL数据库中插入数据

import java.sql.*;

public class WriteToDB {
    public static void main(String[] args) {
        try {
            // 1.加载数据库驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2.连接数据库
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/testdb",
                    "testuser",
                    "testpass");

            // 3.创建Statement
            Statement stmt = conn.createStatement();

            // 4.插入数据
            String insertSql = "INSERT INTO Employee " +
                    "(id, name, age) " +
                    "VALUES (2, 'Mary', 25)";
            stmt.executeUpdate(insertSql);

            // 5.关闭资源
            stmt.close();
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码演示了如何向MySQL数据库的Employee表中插入一行数据,该行数据的id为2,name为Mary,age为25。

参考资料

  1. JDBC Tutorial
  2. MySQL Connector/J

本文标题为:JDBC 连接MySQL实例详解

基础教程推荐