mysql驱动加载原理_老调重弹:JDBC系列 之 <驱动载入原理全面解析>

前言

近期在研究Mybatis框架,因为该框架基于JDBC。想要非常好地理解和学习Mybatis,必需要对JDBC有较深入的了解。所以便把JDBC 这个东东翻出来。好好总结一番,作为自己的笔记,也是给读者一个參考~~~下面是本文的组织结构。读者能够点击上面的文件夹查看:

285ddd2ae28a71e2bcdad671bd64e85c.png

概述

普通情况下。在应用程序中进行数据库连接,调用JDBC接口,首先要将特定厂商的JDBC驱动实现载入到系统内存中。然后供系统使用。

基本结构图例如以下:

391e9394e1695a9d2cf5d1362c8fcdde.png

驱动载入入内存的过程

这里所谓的驱动,事实上就是实现了java.sql.Driver接口的类。如oracle的驱动类是 oracle.jdbc.driver.OracleDriver.class(此类能够在oracle提供的JDBC jar包中找到),此类实现了java.sql.Driver接口。

因为驱动本质上还是一个class,将驱动载入到内存和载入普通的class原理是一样的:使用Class.forName("driverName")。下面是将经常使用的数据库驱动载入到内存中的代码:

//载入Oracle数据库驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

//载入SQL Server数据库驱动

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//载入MySQL 数据库驱动

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

注意:Class.forName()将相应的驱动类载入到内存中,然后运行内存中的static静态代码段,代码段中。会创建一个驱动Driver的实例,放入DriverManager中,供DriverManager使用。

比如,在使用Class.forName() 载入oracle的驱动oracle.jdbc.driver.OracleDriver时。会运行OracleDriver中的静态代码段,创建一个OracleDriver实例。然后调用DriverManager.registerDriver()注冊:

static {

Timestamp localTimestamp = Timestamp.valueOf("2000-01-01 00:00:00.0");

try {

if (defaultDriver == null) {

//创建一个OracleDriver实例,然后注冊到DriverManager中

defaultDriver = new OracleDriver();

DriverManager.registerDriver(defaultDriver);

}

} catch (RuntimeException localRuntimeException) {

} catch (SQLException localSQLException) {

}

Driver的功能

java.sql.Driver接口规定了Driver应该具有下面功能:

SouthEast

当中:

acceptsURL(String url)方法用来測试对指定的url,该驱动是否能打开这个url连接。driver对自己可以连接的url会制定自己的协议。仅仅有符合自己的协议形式的url才觉得自己可以打开这个url,假设可以打开。返回true,反之,返回false;

比如:oracle定义的自己的url协议例如以下:

jdbc:oracle:thin:@//:/ServiceName

jdbc:oracle:thin:@::

oracle自己的acceptsURL(String url)方法例如以下:

public boolean acceptsURL(String paramString) {

if (paramString.startsWith("jdbc:oracle:")) {<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于使用 FFmpeg 处理视频的开发者来说,常常会遇到视频时间同步的问题。这个问题一般出现在视频的编码和解码过程中,原因是由于视频的帧率和音频的采样率不同步导致的。如果不处理这个问题,在处理视频的过程中可能会导致视频和音频不同步,出现画面与声音不匹配的情况。 下面介绍一种简单的方法来解决这个问题,使用 FFmpeg 的 filter_complex 参数进行音视频同步处理。 首先,我们需要使用 FFmpeg 的 ffprobe 工具来获取视频文件的基本信息,包括视频的帧率和音频的采样率。可以使用以下命令来获取: ``` ffprobe -i input.mp4 ``` 接下来,我们需要使用 FFmpeg 的 filter_complex 参数来进行音视频同步处理。具体来说,我们需要使用 aresample 和 setpts 这两个滤镜来处理音频和视频的时间戳。 aresample 滤镜用于调整音频的采样率,使其与视频的帧率同步。我们可以使用以下命令来调整音频的采样率: ``` -af aresample=async=1 ``` setpts 滤镜用于调整视频的时间戳,使其与音频的时间戳同步。具体来说,我们需要将视频的时间戳减去音频的时间戳差值,从而达到同步的效果。我们可以使用以下命令来调整视频的时间戳: ``` -vf setpts=PTS-STARTPTS+delay/TB ``` 其中 delay 是音频和视频之间的时间戳差值,TB 是视频的时间基准。 最终,我们可以使用以下命令来进行音视频同步处理: ``` ffmpeg -i input.mp4 -af aresample=async=1 -vf setpts=PTS-STARTPTS+delay/TB output.mp4 ``` 这样就可以解决音视频同步问题。需要注意的是,由于每个视频文件的帧率和采样率可能不同,因此 delay 和 TB 的值需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值