com.mysql.cj.jdbc.Driver这个驱动类


mysql5及之前的版本使用的是旧版驱动"com.mysql.jdbc.Driver",

mysql6以及之后的版本需要更新到新版驱动,对应的Driver是"com.mysql.cj.jdbc.Driver"

com.mysql.cj.jdbc.Driver

这个类是数据库厂商实现的JDBC一套接口里的一个类,称之为“驱动类”,它的继承树如下所示:

    ————com.mysql.jdbc.Driver extends com.mysql.cj.jdbc.Driver

        ————com.mysql.cj.jdbc.Driver extends NonRegisteringDriver

            ————public class NonRegisteringDriver implements java.sql.Driver

其中java.sql是sun官方提供的包,java.sql.Driver是sun提供的一组用于连接数据库的接口之一,由数据库厂商自行实现

由上可知,com.mysql.cj.jdbc.Driver这个驱动类,是对java.sql.Driver接口的实现

 


对于Connection conn = DriverManager.getConnection("***","***","***");来说

java.sql.Driver中有一个方法:Connection connect;

 Connection connect(String url, java.util.Properties info)

        throws SQLException;

 

DriverManager类中,有一个静态私有方法:private static Connection getConnection(){}用这个静态私有方法,返回一个Connection对象(体现了封装),在它的内部,调用了java.sql.Driver接口里的Connection connect()方法

try {

      println("trying " + aDriver.driver.getClass().getName());

             Connection con =  aDriver.driver.connect(url, info);

             if (con != null) {

             println("getConnection returning" + aDriver.driver.getClass().getName());

                        return (con);

                    }

 

Connection而在编程过程中,驱动类com.mysql.cj.jdbc.Driver的载入,是由反射完成的,

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

 

该语句将驱动类载入JVM内存,驱动类的静态数据方法区生成一个数据结构,在堆中生成一个Driver类对应的java.lang.Class对象,作为方法去类数据的访问入口。

 


载入这个类com.mysql.cj.jdbc.Driver进JVM之后,在后续的程序中,就可以使用它。

调用Driver中的方法connect,就可以得到一个数据库和应用程序的来连接,而这种调用由第三方:DriverManager来完成,这个第三方被称为驱动管理员,它可以整合需要的东西,配合驱动,得到连接。

而不是由Driver自己直接去获取连接。

 

DriverManager会跟踪可用的驱动程序,并在数据库和相应的驱动之间建立连接,即获得一个Connection对象

比如系统中有十个被加载的驱动,驱动管理员一个一个检验,哪一个适用于当前数据库的连接,检验到合适的驱动,进行获取连接操作。源代码示例:

 

 for(DriverInfo aDriver : registeredDrivers) {

            if(isDriverAllowed(aDriver.driver, callerCL)) {

                try {

                    println("    trying " + aDriver.driver.getClass().getName());

                    Connection con = aDriver.driver.connect(url, info);

                    if (con != null) {

           println("getConnection returning " + aDriver.driver.getClass().getName());

                        return (con);

                    }

                } catch (SQLException ex) {

                    if (reason == null) {

                        reason = ex;

                    }

                }

            } else {

                println("skipping: " + aDriver.getClass().getName());

            }

 


Connection接口

    - Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。

    - DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上

      -Mysql

        Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

      -Oracle

        Connection con = DriverManager.getConnection("jdbc:oracle:thin@host:port/database", "user", "password");

 


Statement接口

    - 用于执行静态SQL语句并返回它所生成结果的对象。三种Statement类:

      - Statement

        由createStatement创建,用于发送简单的SQL语句(不带参数)

Statement createStatement() throws SQLException;

      - PreparedStatement

        - 继承自Statement接口,有preparedStatement创建,用于发送含有一个或者多个输入参数的SQL语句。PreparedStatement对象比Statement对象效率更高,并且是防止SQL注入。我们一般都使用PreparedStatement。

PreparedStatement prepareStatement(String sql)throws SQLException;     

             - CallableStatement

        - 继承自preparedStatement。由方法prePareCall创建,用于调用存储过程。

 CallableStatement prepareCall(String sql) throws SQLException;

    - 常用的Statement方法

        - execute():运行语句,返回是否有结果集。

        - executeQuery():运行select语句,返回ResultSet结果节

        - executeUpdate():运行insert/update/delete操作,返回更新的行数。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值