当前位置: 首页 > article >正文

《Java 中 JDBC 连接 MySQL 实现增删改查全攻略》

一、引言

JDBC(Java Database Connectivity)是 Java 语言中用于连接和操作数据库的重要技术。本文将详细介绍如何使用 Java 的 JDBC 连接 MySQL 数据库,并实现增删改查的操作。

JDBC 为 Java 开发者提供了一种统一的方式来连接和操作各种不同的数据库。在实际应用中,我们经常需要使用 JDBC 来连接 MySQL 数据库,以实现对数据的增删改查等操作。下面我们将逐步介绍如何使用 JDBC 连接 MySQL 数据库并进行增删改查操作。

连接 MySQL 数据库的步骤

  1. 加载驱动程序:加载相应数据库的 JDBC 驱动程序是连接数据库的第一步。对于 MySQL 数据库,我们可以使用 Class.forName() 方法来加载驱动程序。例如:

   try {

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

   } catch (ClassNotFoundException e) {

       e.printStackTrace();

   }

  1. 获取连接:使用 DriverManager.getConnection() 方法获取数据库连接。需要提供数据库的 URL、用户名和密码。例如:

   String url = "jdbc:mysql://localhost:3306/mydb";

   String user = "root";

   String password = "111111";

   try {

       conn = DriverManager.getConnection(url, user, password);

   } catch (SQLException e) {

       System.out.println("Connect failed!");

   }

  1. 创建 Statement 对象:通过连接对象 Connection 创建 Statement 对象,以便执行 SQL 语句。例如:

   stmt = conn.createStatement();

  1. 执行 SQL 语句:使用 Statement 对象执行 SQL 语句。如果是查询语句,可以使用 executeQuery() 方法,该方法返回一个 ResultSet 对象,包含查询结果。如果是插入、更新或删除语句,可以使用 executeUpdate() 方法,该方法返回受影响的行数。例如:

   // 查询语句

   rs = stmt.executeQuery("select * from test");

   // 插入语句

   int result = stmt.executeUpdate("insert into table_name values(...)");

  1. 处理结果集:如果是查询语句,需要遍历 ResultSet 对象来获取查询结果。例如:

   while (rs.next()) {

       String title = rs.getString("id");

       String name = rs.getString("name");

       System.out.println(title + " " + name);

   }

  1. 关闭资源:操作完成后,需要关闭 ResultSetStatement 和 Connection 对象,以释放资源。例如:

   try {

       if (rs!= null) rs.close();

       if (stmt!= null) stmt.close();

       if (conn!= null) conn.close();

   } catch (SQLException e) {

       e.printStackTrace();

   }

JDBC 连接 MySQL 数据库的示例代码

以下是一个完整的 JDBC 连接 MySQL 数据库并进行查询操作的示例代码:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class MySQLDemo {

    private Connection conn = null;

    private Statement stmt = null;

    private ResultSet rs = null;

    private String driverclass = "com.mysql.cj.jdbc.Driver";

    private String url = "jdbc:mysql://localhost:3306/mydb";

    private String user = "root";

    private String password = "111111";

    public MySQLDemo() {

        try {

            Class.forName(driverclass).newInstance(); // 加载驱动程序

        } catch (InstantiationException e) {

            e.printStackTrace();

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        } catch (ClassNotFoundException e1) {

            System.out.println("class not found");

        }

        try {

            conn = DriverManager.getConnection(url, user, password); // 获得 Connection 对象

        } catch (Exception e) {

            System.out.println("Connect failed!");

        }

    }

    public void selectMethod(String sql) {

        System.out.println("id title");

        try {

            stmt = conn.createStatement(); // 获得 Statement 对象

            rs = stmt.executeQuery(sql); // 执行 SQL 语句,并返回 ResultSet 类型的结果

            while (rs.next()) {

                String title = rs.getString("id");

                String name = rs.getString("name");

                System.out.println(title + " " + name);

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    public void closeDB() throws SQLException {

        if (rs!= null) rs.close();

        if (stmt!= null) stmt.close(); // 关闭 Statement 对象

        if (conn!= null) // 关闭 Connection 对象

            conn.close();

    }

    public static void main(String args[]) {

        MySQLDemo demo = new MySQLDemo();

        demo.selectMethod("select * from test");

    }

}

JDBC 连接 MySQL 数据库的注意事项

  1. 确保正确加载驱动程序:不同版本的 MySQL 数据库可能需要不同版本的驱动程序。在加载驱动程序时,要确保使用正确的类名。
  2. 处理异常:在连接数据库和执行 SQL 语句的过程中,可能会出现各种异常。要妥善处理这些异常,以确保程序的稳定性。
  3. 关闭资源:操作完成后,一定要关闭 ResultSetStatement 和 Connection 对象,以释放资源。否则,可能会导致资源泄漏,影响程序性能。

通过以上步骤,我们可以使用 Java 的 JDBC 连接 MySQL 数据库,并实现增删改查的操作。在实际应用中,可以根据具体需求对代码进行调整和扩展。

二、准备工作

  1. 下载并安装 MySQL 数据库。

要使用 Java 的 JDBC 连接 MySQL 数据库,首先需要下载并安装 MySQL 数据库。可以从 MySQL 官方网站下载适合自己操作系统的安装包,并按照安装向导进行安装。安装过程中需要设置数据库的用户名和密码等信息,这些信息将在后续的连接过程中使用。

  1. 导入 MySQL 的 JDBC 驱动,可以通过 Maven 引入依赖,也可以手动下载 jar 包添加到项目中。
    • 通过 Maven 引入依赖:在项目的 pom.xml 文件中添加 MySQL 的 JDBC 驱动依赖。例如:

     <dependency>

         <groupId>mysql</groupId>

         <artifactId>mysql-connector-java</artifactId>

         <version>8.0.21</version>

     </dependency>

  • 手动下载 jar 包添加到项目中:
    • 下载 MySQL 的 JDBC 驱动 jar 包,可以从 MySQL 官方网站或者其他可信的源下载。确保下载的 jar 包版本与使用的 MySQL 数据库版本相匹配。
    • 在项目中创建一个 lib 目录,将下载的 jar 包复制到该目录中。
    • 在项目的构建路径中添加这个 jar 包。在 IDE(如 Eclipse)中,选择项目,右键点击选择 “Properties”,然后选择 “Java Build Path”。在 “Libraries” 选项卡下,点击 “Add JARs...” 按钮,选择刚刚复制到 lib 目录中的 MySQL 驱动 jar 包,点击 “OK” 完成添加。

三、连接 MySQL 数据库

  1. 加载 MySQL 驱动。使用 Class.forName ("com.mysql.jdbc.Driver") 加载驱动程序。

在 Java 中,连接 MySQL 数据库的第一步是加载驱动程序。可以通过使用Class.forName("com.mysql.jdbc.Driver")来实现这一步骤。例如:

   try {

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

   } catch (ClassNotFoundException e) {

       e.printStackTrace();

   }

这样的代码会要求 JVM 查找并加载指定的 MySQL 驱动类,从而为后续的数据库连接做好准备。

  1. 获取数据库连接。通过 DriverManager.getConnection (url, username, password) 获取连接,其中 url 为数据库连接字符串,username 和 password 分别为数据库用户名和密码。

获取数据库连接是连接 MySQL 数据库的关键步骤之一。可以使用DriverManager.getConnection(url, username, password)方法来实现。其中,url是数据库连接字符串,通常的格式为jdbc:mysql://[hostname][:port]/[dbname],例如jdbc:mysql://localhost:3306/mydb,这里localhost表示本地主机,3306是 MySQL 的默认端口号,mydb是要连接的数据库名称。usernamepassword分别是数据库的用户名和密码。例如:

   String url = "jdbc:mysql://localhost:3306/mydb";

   String user = "root";

   String password = "111111";

   try {

       conn = DriverManager.getConnection(url, user, password);

   } catch (SQLException e) {

       System.out.println("Connect failed!");

   }

通过这样的代码,就可以建立与 MySQL 数据库的连接。如果连接过程中出现问题,会抛出SQLException异常,需要进行适当的异常处理,以确保程序的稳定性。

四、实现增删改查操作

  1. 查询操作使用Connection.createStatement()创建Statement对象。执行Statement.executeQuery(sql)进行查询,返回ResultSet结果集。遍历结果集获取数据。
    • 首先,通过连接对象创建Statement对象:

     stmt = conn.createStatement();

  • 然后,使用Statement.executeQuery(sql)执行查询语句,传入 SQL 查询语句字符串,该方法返回一个ResultSet结果集,包含查询结果:

     rs = stmt.executeQuery("select * from table_name");

  • 最后,遍历ResultSet结果集获取数据,可以使用while(rs.next())循环,通过rs.getString("column_name")等方法获取指定列的值:

     while (rs.next()) {

         String columnValue = rs.getString("column_name");

         System.out.println(columnValue);

     }

  1. 增加操作构建插入 SQL 语句,使用PreparedStatement预编译 SQL 语句。设置参数值,执行PreparedStatement.executeUpdate()插入数据。
    • 构建插入 SQL 语句,使用PreparedStatement预编译 SQL 语句,其中 SQL 语句中的参数用问号(?)表示:

     String insertSql = "insert into table_name (column1, column2,...) values (?,?,...)";

     PreparedStatement ps = conn.prepareStatement(insertSql);

  • 设置参数值,根据参数的类型使用相应的setXxx()方法,如setString()setInt()等:

     ps.setString(1, value1);

     ps.setInt(2, value2);

    ...

  • 执行PreparedStatement.executeUpdate()插入数据,该方法返回受影响的行数:

     int result = ps.executeUpdate();

     if (result > 0) {

         System.out.println("插入成功!");

     } else {

         System.out.println("插入失败!");

     }

  1. 删除操作构建删除 SQL 语句,使用PreparedStatement预编译 SQL 语句。执行PreparedStatement.executeUpdate()删除数据。
    • 构建删除 SQL 语句,同样使用PreparedStatement预编译 SQL 语句:

     String deleteSql = "delete from table_name where column_name =?";

     PreparedStatement ps = conn.prepareStatement(deleteSql);

  • 设置参数值,确定删除的条件:

     ps.setString(1, conditionValue);

  • 执行PreparedStatement.executeUpdate()删除数据:

     int result = ps.executeUpdate();

     if (result > 0) {

         System.out.println("删除成功!");

     } else {

         System.out.println("删除失败!");

     }

  1. 修改操作构建修改 SQL 语句,使用PreparedStatement预编译 SQL 语句。设置参数值,执行PreparedStatement.executeUpdate()修改数据。
    • 构建修改 SQL 语句,使用PreparedStatement预编译 SQL 语句:

     String updateSql = "update table_name set column1 =?, column2 =?,... where column_name =?";

     PreparedStatement ps = conn.prepareStatement(updateSql);

  • 设置参数值,包括要修改的列的值和修改的条件:

     ps.setString(1, newValue1);

     ps.setString(2, newValue2);

    ...

     ps.setString(n, conditionValue);

  • 执行PreparedStatement.executeUpdate()修改数据:

     int result = ps.executeUpdate();

     if (result > 0) {

         System.out.println("修改成功!");

     } else {

         System.out.println("修改失败!");

     }

五、资源释放

在操作完成后,务必释放数据库连接、Statement 和 ResultSet 等资源,以避免资源泄漏。

释放资源的方式有多种,以下是一些常见的方法:

一、try-with-resources 语句

在 Java 中,可以使用 try-with-resources 语句来自动关闭连接。这样可以确保在使用完连接后,自动释放连接资源。

try (Connection conn = DriverManager.getConnection(url, username, password);

     Statement stmt = conn.createStatement();

     ResultSet rs = stmt.executeQuery("SELECT * FROM table_name")) {

    // 处理结果集

} catch (SQLException e) {

    e.printStackTrace();

}

二、显式关闭连接

如果不使用 try-with-resources 语句,也可以在操作完成后显式关闭连接。在这种情况下,需要确保在操作完成后调用 close () 方法关闭连接。

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

try {

    conn = DriverManager.getConnection(url, username, password);

    stmt = conn.createStatement();

    rs = stmt.executeQuery("SELECT * FROM table_name");

    // 处理结果集

} catch (SQLException e) {

    e.printStackTrace();

} finally {

    try {

        if (rs!= null) rs.close();

        if (stmt!= null) stmt.close();

        if (conn!= null) conn.close();

    } catch (SQLException e) {

        e.printStackTrace();

    }

}

三、使用连接池

另一种更好的方式是使用连接池来管理 MySQL 连接。连接池可以帮助我们在需要连接时从池中获取连接,在使用完成后将连接返回到池中,而不必手动管理连接的打开和关闭。

DataSource dataSource = new BasicDataSource();

((BasicDataSource)dataSource).setDriverClassName("com.mysql.jdbc.Driver");

((BasicDataSource)dataSource).setUrl(url);

((BasicDataSource)dataSource).setUsername(username);

((BasicDataSource)dataSource).setPassword(password);

Connection conn = null;

try {

    conn = dataSource.getConnection();

    Statement stmt = conn.createStatement();

    ResultSet rs = stmt.executeQuery("SELECT * FROM table_name");

    // 处理结果集

    rs.close();

    stmt.close();

} catch (SQLException e) {

    e.printStackTrace();

} finally {

    if (conn!= null) {

        try {

            conn.close();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

}

在释放资源时,需要注意以下几点:

  1. 先关闭 ResultSet,然后关闭 Statement,最后关闭 Connection,按照这个顺序释放资源可以避免一些潜在的问题。
  2. 在关闭资源之前,需要先判断资源是否为 null,避免空指针异常。
  3. 如果在关闭资源的过程中出现异常,需要捕获并处理异常,以确保其他资源也能被正确关闭。

通过以上方法,可以有效地释放数据库连接、Statement 和 ResultSet 等资源,避免资源泄漏,提高程序的性能和稳定性。

六、总结

本文详细介绍了使用 Java 的 JDBC 连接 MySQL 数据库并实现增删改查操作的方法。通过实际代码示例,读者可以快速掌握这一重要的数据库操作技术,为开发 Java 应用程序提供有力支持。

在实际开发中,掌握 JDBC 连接 MySQL 数据库并进行增删改查操作是非常重要的技能。通过本文的介绍,我们可以看到,使用 Java 的 JDBC 连接 MySQL 数据库并不复杂,只需要按照一定的步骤进行操作即可。

首先,我们需要下载并安装 MySQL 数据库,并导入 MySQL 的 JDBC 驱动。然后,通过加载驱动程序、获取数据库连接、创建 Statement 对象、执行 SQL 语句和处理结果集等步骤,我们可以实现对 MySQL 数据库的增删改查操作。

在实际应用中,我们可以根据具体需求对代码进行调整和扩展。例如,可以使用连接池来管理数据库连接,提高程序的性能和稳定性;可以使用预处理语句来防止 SQL 注入攻击;可以使用事务来保证数据的一致性等。

总之,通过本文的介绍,我们可以掌握使用 Java 的 JDBC 连接 MySQL 数据库并实现增删改查操作的方法,为开发 Java 应用程序提供有力支持。


http://www.kler.cn/a/428766.html

相关文章:

  • vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权
  • 最大矩阵面积问题
  • Ubuntu 24.04 LTS 服务器折腾集
  • 国内汽车法规政策标准解读:GB 44495-2024《汽车整车信息安全技术要求》
  • Centos 8 交换空间管理
  • 【HarmonyOS-开发指南】
  • jeccg-boot修改密码
  • tcp_recvmsg 函数
  • 如何在 Redis 上配置 SSL/TLS ?
  • PDF文件打开之后不能打印,怎么解决?
  • Lakehouse 架构下的元数据“大一统”管理深度解析
  • 根据时钟周期来做判断,怎么理清逻辑,计数器的逻辑,握手
  • Docker(一)
  • 【gitLab正常使用记录】
  • 《MySQL 表结构设计基础》
  • 企业数字化转型:从爆品起步,迈向生态平台
  • uniapp h5 vue3 m3u8 和 mp4 外链视频播放
  • LeetCode45:跳跃游戏II
  • 【CSS in Depth 2 精译_067】11.2 颜色的定义(中):CSS 中的色域与色彩空间
  • C# GDI绘制的倒计时控件
  • 数组 - 八皇后 - 困难
  • 模拟IC设计中LDO的学习笔记(一)
  • 【C#】NET 9中LINQ的新特性-CountBy
  • 【Pandas】pandas wide_to_long
  • AWS Kinesis Firehose 权限配置完全指南
  • BERT模型的输出格式探究以及提取出BERT 模型的CLS表示,last_hidden_state[:, 0, :]用于提取每个句子的CLS向量表示