mysql“连接模块”与“客户端连接驱动”

  1. mysql“连接模块”与“客户端连接驱动(eg:JDBC, ODBC ,etc)”之间建立连接,连接模块进化为连接池,维护了连接的创建与断开,对连接进行了复用(连接池相关的参数有 最大连接数:“max_connections”, 最大单个报文长度:“max_allowed_packet”,其实连接池是客户端的实现,mysql服务端并没有对连接池的实现)

画板

#显示最大连接数
show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1000  |
+-----------------+-------+

#设置最大单个报文长度
set global max_allowed_packet=8388608;

这里很多问题,驱动是干什么的?什么是JDBC,ODBC?(答案在2.)

  1. 驱动是干什么的?JDBC是什么呢?
    1. 驱动的功能
      1. 负责建立java程序与数据库之间的连接
      2. 将 Java 程序发出的 SQL 语句翻译成数据库能够理解的格式,并将执行结果传回 Java 程序。
    2. JDBC ( Java DataBase Connectivity ) : JDBC使用驱动程序 ( mySQL JDBC, Oracle JDBC, … )与不同的数据库进行通信
      1. 驱动程序又有不同的驱动类型:JDBC-ODBC桥接驱动程序,本地API驱动,网络协议驱动,数据库原生协议驱动(这里就会有问题,为什么会有这四种类型?实现方式有什么区别?这四种类型有哪些应用场景?(答案在3.4.))
      2. JDBC组件:
        1. DirverManager:管理数据库连接驱动
        2. Connection :代表数据库连接
        3. Statement :用来执行SQL
        4. ResultSet :存储查询结果
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象
String url = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=false"
String username = “root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
//3,定义SQL
String sql = "update account set money = 2000 where id = 1";
//4. 获取执行sql的对象
Statemekt stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);
//6.处理结果
//System.out.println(count)
//7.释放资源
stmt.close();
conn.close():
  1. ODBC (Open DataBase Connectivity)
    微软公司推出的开放标准,提供跨平台的数据库连接能力,为应用程序提供了一个统一的接口,使得不同的DBMS能够使用相同的API进行访问,即 ODBC 允许应用程序通过相同的接口访问不同类型的数据库。它为各种数据库提供了一个标准化的通信协议,开发者无需关心数据库的具体现。ODBC 主要用于基于 C 语言的应用程序,并且通常在 Windows 平台上使用,但也有其他平台的实现。

  2. JDBC-ODBC桥接驱动程序,本地API驱动,网络协议驱动,数据库原生协议驱动这四种驱动类型有哪些应用场景,实现有什么不同?

    1. JDBC-ODBC桥接驱动程序:
      Java 程序通过 JDBC 发出请求,JDBC-ODBC 桥接驱动将这些请求传递给 ODBC 驱动,之后 ODBC 驱动将请求转化为数据库能够理解的格式。
      2. 优点:可以连接多种数据库,尤其是旧版本的数据库。
      3. 缺点:性能差,ODBC兼容可能有问题,JDK8已经删除了,适用于需要通过ODBC 连接数据库的情况,但通常不再推荐使用。
    2. 本地API驱动(Native-API Dirver):
      1. 本地 API 驱动直接使用数据库厂商提供的本地客户端 API(如 Oracle Call Interface, OCI)来与数据库通信。
      2. Java 程序通过 JDBC 调用本地数据库的原生 API,驱动将 JDBC 调用转换为相应的本地 API 调用,然后通过该 API 与数据库进行通信。
      3. 优点:性能好,并且通常提供了很多数据库优化和增强功能。
      4. 缺点:依赖于数据库厂商提供的原生库,可能会导致与不同数据库的兼容性问题。需要在客户端安装特定的数据库客户端软件(例如 Oracle 客户端)
    3. 网络协议驱动:
      1. 该驱动通过使用数据库提供的网络协议来与数据库进行通信。它将 JDBC 调用转化为特定的网络协议(例如 MySQL 协议)并通过网络连接数据库.Java 程序发出的 JDBC 请求首先被转化为数据库支持的网络协议,然后通过网络发送给数据库,数据库返回响应。
      2. 优点:通常可以支持多种数据库,只是协议不同,不需要依赖本地API或者ODBC驱动。
      3. 缺点:相对于本地API性能较差(因为涉及到了网络传输请求和响应),数据库协议的实现需要根据每个数据库的具体要求来处理。 适用于支持网络协议的数据库,如 MySQL 等。
    4. 数据库原生协议驱动(Database-Protocol Driver):
      1. Java 程序通过 JDBC 发出请求,数据库原生协议驱动将请求转换为特定数据库的原生协议,然后通过网络或本地连接发送请求。
      2. 优点:性能最好直接使用数据库原生协议,无需额外的转换层,有数据库厂商提供,能供充分优化。
      3. 缺点:该驱动通常仅支持和特定的数据库协作。无法跨数据库。适用于大型企业级数据库应用,如 Oracle 或 PostgreSQL 等。
  3. 为什么会有这些不同类型的驱动?

    兼容性:不同类型的数据库系统使用不同的协议和接口,因此需要不同的驱动来适配这些差异。

    性能需求:某些应用需要高性能的数据库连接,这就要求驱动能够直接通过数据库原生协议通信,避免中间层的开销。

    历史演进:随着时间的推移,JDBC 驱动的发展经历了不同的阶段,早期为了兼容各种数据库,使用了 ODBC 桥接等方法。而现在的驱动更加注重性能和易用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skwwww_xdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值