mysql驱动类型
概述有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多。一、需要优化的查询使用explain常见的扫...
2024.11.15今天没有什么太多的感悟,分享下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下指定了驱动类
以上就是浅显的驱动加载注册的过程,欢迎大家评论指教。
概述有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多。一、需要优化的查询使用explain常见的扫...
2024.11.15之前管理mysql数据库,我是远程VNC登陆到服务器,然后在服务器上通过mysql command line client进行查询操作等,偶然前几天,发现可以不远程登陆服务器,本地CMD可以直接登陆,...
2024.11.15Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它具有高效、轻量级和事件驱动等特点,非常适合构建高性能的Web应用。连接MySQL数据库是在Node.js应用中常见的任...
2024.11.13什么是JDBC?Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中...
2024.11.15一、什么是JDBC?JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 ja...
2024.11.12