Java与MySQL数据库连接的JDBC驱动配置教程

系列文章目录

Java JDBC编程


文章目录

  • 系列文章目录
  • 前言
  • 一、JDBC简介:
  • 二、mysql-connector-java驱动详解:
    • 驱动版本特性介绍:
  • JDBC驱动安装与配置:
    • 1.IDE项目设置:
    • 2.命令行安装:
    • 3.使用Maven或Gradle 
    • 配置要点:
  • Java程序中的MySQL数据库连接操作:
    • 1.连接URL的格式和参数解读:
    • 2.SQL语句执行方法:
    • 3.结果集处理:
  • 总结


前言

   我们在学习数据库和java程序以后我们需要将其连接起来,这时候就需要用到JDBC,通过使用JDBC,Java程序可以轻松地操作各种主流数据库,例如,Oracle,MS SQL Server,MySQL等。由于Java语言本身的跨平台性,所以使用JDBC编写的程序不仅可以实现跨数据库,还具有跨平台性和可移植性。使用JDBC访问数据库具有操作简单,获取方便且安全可靠等优势。所以我们将详细讲解一下JDBC编程。


         

一、JDBC简介:

Java 数据库连接(JDBC)是Java应用程序与数据库之间的一种标准的SQL数据库连接协议。它允许Java开发者通过Java代码使用SQL语句来访问和操作数据库中的数据。JDBC是Java平台的一部分,它为不同类型的数据库提供了统一的访问方式,使Java程序可以移植到不同的数据库系统上,只需要更换相应的JDBC驱动。

JDBC包含了一系列的API和Java类库,开发者可以通过这些API和类库来执行SQL语句,管理数据库连接,处理事务,以及处理查询结果等。JDBC API定义了一套Java程序如何与数据库交互的标准接口,而JDBC驱动则是实现这些接口的具体方式。

随着Java技术的发展,JDBC也在不断地进化。从JDBC 1.0到如今的JDBC 4.3,每一次更新都对数据库编程的便捷性和性能进行了优化,例如支持Java 8的Lambda表达式和新时间日期API等特性。

下面章节将详细介绍JDBC的安装、配置以及如何在Java程序中进行MySQL数据库的连接操作。

     

核心作用​​:

  1. 建立数据库连接。
  2. 执行 SQL 语句(查询、更新、事务等)。
  3. 处理结果集(查询返回的数据)。

             

      

二、mysql-connector-java驱动详解:

     

         在现代的Java应用开发中, mysql-connector-java 驱动是连接Java应用程序和MySQL数据库的重要桥梁。

驱动版本特性介绍:


mysql-connector-java-5.1.13-bin.jar 是一个被广泛使用的稳定版本,其提供了与MySQL 5.1.x版本的数据库兼容的连接能力。这个版本的驱动支持如自动重连、连接池等重要的特性,使得数据库连接更加稳定和高效。此版本还增加了对SSL加密通信的支持,这在处理敏感数据时显得尤为重要。

三、JDBC驱动安装与配置:          

 我们需要下载一个来完成驱动:

        链接在这里: mysql-connector-java-5.1.13-bin.jar​​​​​​

       需要的同学可以进行下载。

  1.IDE项目设置:

    下载好了之后我们需要在当前进行连接数据库的项目中创建一个文件夹,把这个jar包放进去。 

        

    但是可不是放进去就完事了,我们还需要配置依赖,在执行的时候可以找到这个jar包。

      我们要先点项目结构

  然后我们点击这个Modules,然后再点击Dependencies,然后点击上面的加号

   然后选择你的mysql-connector-java-5.1.13-bin.jar所在目录找到它加进去。

  对于eclipse来说,在Eclipse中,这通常通过右键点击项目->属性->Java构建路径->库->添加外部JARs...来完成。

  2.命令行安装:

    可以使用Java的 -cp 参数指定JAR文件的路径来运行Java程序。例如:

java -cp .;path_to/mysql-connector-java-5.1.13-bin.jar com.example.MyApp

    环境变量配置 :将JAR文件路径添加到系统的 CLASSPATH 环境变量中,这样Java运行时就能自动识别并加载JDBC驱动

   3.使用Maven或Gradle 

在现代的Java项目中,通常使用构建自动化工具如Maven或Gradle。在这些项目的 pom.xml (对于Maven)或 build.gradle (对于Gradle)文件中添加依赖项即可自动下载和管理JDBC驱动依赖。

   配置要点:

Classpath配置方法和注意事项
Classpath是Java虚拟机搜索类文件的路径。正确设置Classpath对于JDBC驱动的加载至关重要。以下是Classpath配置的一些要点:

Classpath的设置 :Classpath可以通过多种方式设置,包括使用命令行参数 -cp 或 -classpath ,通过环境变量 CLASSPATH ,或是在IDE中设置。

JAR文件的位置 :确保JDBC驱动的JAR文件包含在Classpath中,无论是直接指定JAR文件还是指定包含JAR文件的目录。

环境差异 :在不同的操作系统中,Classpath的设置可能有所不同。例如,在Windows系统中,多个路径用分号( ; )分隔,在Unix/Linux系统中则使用冒号( : )。

路径引用 :如果JAR文件位于应用程序的当前工作目录中,可以使用相对路径 . 来表示。

代码块示例:

下面是一个使用 mysql-connector-java-5.1.13-bin.jar 驱动连接MySQL数据库的代码示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class MysqlConnectExample {
    public static void main(String[] args) {
        Connection conn = null;
        try {
            // 加载并注册JDBC驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 创建数据库连接
            String url = "jdbc:mysql://localhost:3306/your_database_name?useSSL=false";
            String user = "your_username";
            String password = "your_password";
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("成功连接数据库!");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

    四、Java程序中的MySQL数据库连接操作:

     

加载驱动与获取连接的方法
在Java中,与MySQL数据库建立连接通常涉及以下几个关键步骤:

加载驱动 :在Java程序中,我们必须首先加载MySQL JDBC驱动,以便能够与MySQL数据库进行通信。这可以通过调用 Class.forName() 方法实现,或者根据JDBC 4.0规范,如果驱动程序类在类路径中,驱动程序将在运行时自动加载。

获取连接 :一旦驱动被加载,我们可以使用 DriverManager.getConnection() 方法来获取一个数据库连接。这个方法需要一个连接字符串(也称为URL)、用户名和密码作为参数。

下面的代码展示了如何加载MySQL JDBC驱动,并建立一个数据库连接:

    

package JdbcSimple;

import java.sql.*;

/**
 * @author 袁敬尧
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class ConnectionDemo {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/userdetail?useSSL=false&serverTimezone=UTC";
 // 数据库连接URL格式通常为 "jdbc:mysql://<host>:<port>/<database>"
            String user = "root";
            String password = "123456";

            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("数据库已经连接成功");
            //创建Statement对象
            Statement stmt = conn.createStatement();
            //获取查询结果集
            String seq = "SELECT id ,username FROM userdetails";
            ResultSet rs = stmt.executeQuery(seq);
            System.out.println("查询成功!");
            //访问结果集中的数据
            while (rs.next()) {
                System.out.println(rs.getString(1) + " " + rs.getString("username"));
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException e) {
            e.printStackTrace();
        }


    }
}

   请注意,在JDBC 4.0及以上版本中,如果 mysql-connector-java 驱动已正确添加到项目的类路径中,那么 Class.forName("com.mysql.cj.jdbc.Driver") 这一步是可选的,因为驱动会自动加载。

连接URL的格式和参数解读:

数据库连接URL的格式通常遵循这样的模式: jdbc:mysql://<host>:<port>/<database> 。下面是一个实际的URL示例:

jdbc:mysql://localhost:3306/mydatabase


协议前缀 : jdbc:mysql:// 前缀表明我们正在使用MySQL数据库。
主机名 : localhost 是运行数据库服务器的计算机的地址。
端口号 : 3306 是MySQL服务器的默认监听端口,如果配置了不同的端口,应该使用相应的端口号。
数据库名 : mydatabase 是我们希望连接的数据库的名称。
除了基础的URL格式,还有几个参数可以添加到URL中以改变连接的行为,如:

SSL配置 : useSSL=false ,如果数据库支持SSL,但你不想使用SSL连接,可以设置这个参数。
允许的服务器端准备的语句 : allowMultiQueries=true ,允许一次执行多个查询。
字符编码设置 : useUnicode=true&characterEncoding=UTF-8 ,用于支持Unicode和UTF-8字符编码。
例如,一个带有额外参数的连接字符串可能如下所示:

jdbc:mysql://localhost:3306/mydatabase?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8

 SQL语句执行方法:

     Statement和PreparedStatement的使用

在建立了数据库连接之后,我们可以使用 Statement 或 PreparedStatement 对象来执行SQL语句。

Statement
Statement 对象用于执行静态SQL语句。它们可以用来执行任何类型的SQL语句,但是它们是易受SQL注入攻击的,因为它们不提供参数化查询。

以下是如何使用 Statement 对象的示例代码:

   

package JdbcSimple;

import java.sql.*;

/**
 * @author 袁敬尧
 * @version 1.0
 */

@SuppressWarnings({"all"})
public class ConnectionDemo {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/userdetail?useSSL=false&serverTimezone=UTC";
            String user = "root";
            String password = "123456";

            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("数据库已经连接成功");
            //创建Statement对象
            Statement stmt = conn.createStatement();
            //获取查询结果集
            String seq = "SELECT id ,username FROM userdetails";
            ResultSet rs = stmt.executeQuery(seq);
            System.out.println("查询成功!");
            //访问结果集中的数据
            while (rs.next()) {
                System.out.println(rs.getString(1) + " " + rs.getString("username"));
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

 

PreparedStatement
PreparedStatement 是 Statement 的子接口,它继承了 Statement 的功能,并添加了使用参数化查询的能力。与 Statement 不同, PreparedStatement 能够通过设置参数来预防SQL注入攻击。

以下是如何使用 PreparedStatement 对象的示例代码:

   

package JdbcSimple;

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

/**
 * @author 袁敬尧
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class PreparedStatementDemo {
    public static void main(String[] args) {
        try {
            //加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //建立数据库连接
            String url = "jdbc:mysql://localhost:3306/userdetail?useSSL=false&serverTimezone=UTC";
            String user = "root";
            String password = "123456";

            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("连接成功");
            //定义带参数的SQL语句
            String insertSql = "INSERT INTO userdetails(id,username,pwd,sex) VALUES(?,?,?,?)";
            PreparedStatement pstmt = conn.prepareStatement(insertSql);
            //使用set方法对参数进行赋值
            pstmt.setInt(1,7);
            pstmt.setString(2,"TOM");
            pstmt.setString(3,"123456");
            pstmt.setByte(4,(byte)1);
            //执行
            int result = pstmt.executeUpdate();
            System.out.println("插入"+result+"行");
              pstmt.close();
              conn.close();
        } catch (SQLException e) {
                e.printStackTrace();


        } catch (ClassNotFoundException e) {
               e.printStackTrace();
        }
    }
}
使用 PreparedStatement的另一个好处是预编译SQL语句,可以提高执行效率,尤其是执行相同的SQL语句多次时。

结果集处理:

ResultSet的基本操作:

ResultSet 对象代表数据库查询操作的返回结果集。它允许我们遍历查询结果,并从结果集中获取数据。

以下是如何处理 ResultSet 对象的基本步骤:
  

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
    conn = DriverManager.getConnection(url, user, password);
    stmt = conn.createStatement();
    String query = "SELECT * FROM users";
    rs = stmt.executeQuery(query);
    // 遍历结果集
    while (rs.next()) {
        int id = rs.getInt("id");
        String username = rs.getString("username");
        // 获取其他字段...
        // 处理数据...
    }
} catch (SQLException e) {
    // 异常处理代码...
} finally {
    // 关闭资源的代码...
}
结果集的遍历、检索和更新:
遍历

ResultSet 提供了 next() 方法来移动到结果集的下一行,并返回一个布尔值表示是否有更多行。

while (rs.next()) {
    // 处理每一行的数据...
}
检索

我们可以通过 getString() getInt() getDouble() , 等方法根据列名或列索引检索数据。

  

String username = rs.getString("username");
int id = rs.getInt("id");
更新

ResultSet 提供了 updateXXX 系列方法来更新当前行的数据。要使更改对数据库有效,需要调用 updateRow() 方法。

rs.updateString("username", "newUsername");
rs.updateRow();

代码块的逻辑分析
在上述代码中,我们使用了JDBC API来:

加载MySQL JDBC驱动
建立数据库连接
执行SQL查询
遍历查询结果集
每个步骤都涉及了特定的方法调用和异常处理。 try 块用于尝试执行可能抛出 SQLException 的操作,而 catch 块用于捕获并处理这些异常。 finally 块用于确保即便发生异常,也能够关闭所有打开的资源,比如数据库连接、 Statement 和 ResultSet 对象。


总结

以上就是我要讲的内容,通过以上内容我们基本可以打通Java与数据库之间的连接了,接下来我会持续更新Java的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值