jdbcmysql驱动

发布时间: 2023-11-21 12:03 阅读: 文章来源:1MUMB2846PS

今天没有什么太多的感悟,分享下jdbc的基础知识吧!欢迎大家留言评论!

JDBC(Java DataBase Connectivity, Java数据库连接) ,是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。有了JDBC,程序员只需用JDBC API写一个程序,就可访问所有数据库。

JDBC有几个关键的类和接口:

DriverManager类:驱动的管理类,可以注册驱动、注销驱动、查看驱动列表等。

Connection接口:Connection是给定数据库的连接(会话),在一个连接中sql语句会被执行和返回结果,主要包括事务管理、创建Statement等。

Statement接口:用于执行静态SQL语句并返回其产生的结果的对象。

PreparedStatement接口:Statement的子类,预编译sql语句对象接口。一个sql语句被预编译并且存储在PreparedStatement对象中,后续可以高效多次执行该语句。

下面详细的说下DriverManager类的驱动注册过程。

从DriverManager的源码可以看到,有个静态代码块

static {loadInitialDrivers();println("JDBC DriverManager initialized");}

loadInitialDrivers()方法用来加载驱动。

加载驱动的方式有:

读取System.property中key值为jdbc.drivers的指定驱动列表通过spi的方式,加载路径META-INF/services/java.sql.Driver文件指定的驱动列表private static void loadInitialDrivers() {String drivers;try {drivers = AccessController.doPrivileged(new PrivilegedAction() {public String run() {// 读取指定驱动列表return System.getProperty("jdbc.drivers");}});} catch (Exception ex) {drivers = null;}AccessController.doPrivileged(new PrivilegedAction() {public Void run() {// 读取META-INF/services/java.sql.Driver文件指定的驱动列表ServiceLoader loadedDrivers = ServiceLoader.load(Driver.class);Iterator driversIterator = loadedDrivers.iterator();try{while(driversIterator.hasNext()) {driversIterator.next();}} catch(Throwable t) {// Do nothing}return null;}});println("DriverManager.initialize: jdbc.drivers = " + drivers);if (drivers == null || drivers.equals("")) {return;}String[] driversList = drivers.split(":");println("number of Drivers:" + driversList.length);for (String aDriver : driversList) {try {println("DriverManager.Initialize: loading " + aDriver);Class.forName(aDriver, true,ClassLoader.getSystemClassLoader());} catch (Exception ex) {println("DriverManager.Initialize: load failed: " + ex);}}}

还可以通过DriverManager.registerDriver()方法注册驱动。

public static synchronized void registerDriver(java.sql.Driver driver,DriverAction da)throws SQLException {if(driver != null) {registeredDrivers.addIfAbsent(new DriverInfo(driver, da));} else {throw new NullPointerException();}println("registerDriver: " + driver);}

下面看下mysql的驱动注册加载

mysql的驱动类com.mysql.cj.jdbc.Driver

静态代码块调用DriverManager.registerDriver()

static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can‘t register driver!");}}

同时在路径META-INF/services/java.sql.Driver下指定了驱动类

以上就是浅显的驱动加载注册的过程,欢迎大家评论指教。

•••展开全文