您的位置:

深入浅出MySQL驱动依赖

MySQL驱动依赖是连接Java应用程序与MySQL数据库之间的桥梁,负责将Java的语言机制转换为MySQL的语言机制。本文从多个方面对MySQL驱动依赖进行详细的阐述,旨在为读者提供全面的MySQL使用指南。

一、驱动依赖的安装

MySQL驱动依赖的安装非常简单,只需要按照下面的步骤进行操作即可:

Step 1:从MySQL官网下载最新的JDBC驱动类库mysql-connector-java-x.x.xx.jar文件。

Step 2:将下载的驱动包文件拷贝到Java项目的classpath路径下。

Step 3:通过Java代码实现对MySQL数据库的连接和操作。

注:在实际开发中,为了避免由于版本或者兼容性等问题导致的不兼容,通常建议将MySQL驱动包添加到项目中。

二、基础连接配置

创建一个JDBC连接需要额外的一些连接属性。下面我们来了解一下基础连接配置:

1. 使用类加载驱动程序

在开始使用JDBC之前,需要使用以下代码来加载MySQL驱动程序:

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

注:在Java 6 之前的版本中,需要使用 Class.forName("com.mysql.jdbc.Driver") 来加载驱动程序。

2.建立数据库连接

接下来,我们需要创建一个连接,并使用getConnection方法连接到MySQL数据库。

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");

注:getConnection的第一个参数为连接URL,第二个参数username,第三个参数password。

3.关闭连接

最后,当我们完成对数据库的操作后,应该关闭连接。使用以下代码可以关闭连接:

if(conn != null && !conn.isClosed()){
   conn.close();
 }

三、使用示例

1.插入数据

以下示例代码演示了如何在Java程序中插入数据到MySQL数据库中:

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

public class InsertDemo {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            //建立数据库连接
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, user, password);
            //执行SQL语句
            stmt = conn.createStatement();
            String sql = "insert into user(name,age) values('张三',20)";
            int count = stmt.executeUpdate(sql);
            System.out.println("插入" + count + "条数据成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(stmt != null){
                    stmt.close();
                }
                if(conn != null && !conn.isClosed()){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

2.查询数据

以下示例代码演示了如何在Java程序中查询MySQL数据库中的数据:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SelectDemo {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            //建立数据库连接
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, user, password);
            //执行SQL语句
            stmt = conn.createStatement();
            String sql = "select * from user";
            rs = stmt.executeQuery(sql);
            //处理结果集
            while(rs.next()){
                System.out.println(rs.getString("name") + "\t" + rs.getInt("age"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(rs != null){
                    rs.close();
                }
                if(stmt != null){
                    stmt.close();
                }
                if(conn != null && !conn.isClosed()){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

四、连接池的使用

连接池是一种用于复用数据库连接的技术,通过连接池可以大大提高数据库访问效率。下面我们介绍一下如何使用连接池:

1.引入依赖

在Maven中添加以下依赖即可使用连接池:

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.26</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.2.6</version>
  <scope>provided</scope>
</dependency>

2.进行连接池配置

一般的,连接池的配置都会写在一个.properties文件中,以下是一个示例:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123456
initialSize=5
maxActive=20
minIdle=5
maxWait=60000
timeBetweenEvictionRunsMillis=300000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=20
filters=stat,wall

其中,顶部四个属性 driverClassName、url、username、password 是必填的,其他都是可选的。以下是一些重要的属性。

  • initialSize: 初始化时建立物理连接的个数。
  • maxActive: 最大连接池数量。
  • minIdle: 最小连接池数量。
  • maxWait: 获取连接时最大等待时间,单位毫秒。
  • timeBetweenEvictionRunsMillis: 配置间隔多久才会发起检测,单位毫秒。
  • minEvictableIdleTimeMillis: 连接池中连接保持空闲而不被清除的最长时间,单位毫秒。
  • validationQuery: 用于校验连接是否有效的 SQL 语句,比如Oracle就是 select 1 from dual。
  • testWhileIdle: 是否在空闲时检查连接的有效性。
  • testOnBorrow: 是否在从连接池中获取连接前测试连接的有效性。
  • testOnReturn: 是否在从连接池中归还连接前测试连接的有效性。
  • poolPreparedStatements: 是否缓存 PreparedStatement。
  • maxPoolPreparedStatementPerConnectionSize: 指定每个连接上缓存 PreparedStatement 的最大数目,开启 PreparedStatement 缓存时需要指定。
  • filters: 配置监控统计拦截的filters,去掉后监控界面SQL无法统计(用于统计监控)。

3.初始化连接池

在程序中,可以通过一下代码进行连接池的初始化:

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JdbcUtils {

    private static DataSource ds;

    static {
        Properties pro = new Properties();
        InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            pro.load(is);
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static DataSource getDataSource() {
        return ds;
    }
}

4.使用连接池

使用连接池的代码与之前的没有任何区别,唯一的区别是使用这个数据源来获取连接:

//使用连接池获取数据库连接
Connection conn = JdbcUtils.getConnection();

五、结论

本文从安装驱动依赖、基础连接配置、使用示例和连接池的使用四个方面详细阐述了MySQL驱动依赖的知识,希望能够为读者提供一定的参考。