加载数据库驱动:
1)由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构;
2)JDBC将整个数据库驱动器在底层抽象成一个对象(即驱动器对象),所有对数据库的操作都可以通过该对象进行;
3)只不过数据库驱动对象和普通的Java对象有所不同:
i. 首先大多数普通的Java对象都是运行该Java程序前不存在的,而是运行的时候临时创建的,程序退出后这些对象也随之释放;
ii. 但数据库不一样,数据库往往是不依赖程序运行的,数据库通常都是24小时持续运行,只不过应用程序可以访问它而已,因此数据库对象不能像普通对象那样从无到有地“创建”;
iii. 也就是说一个在应用程序运行之前就已经存在并且正常运行的数据库实例如何在Java程序中访问呢?
4)加载数据库驱动的方法:
i. 加载数据库驱动其实就是将操作系统中正在运行的数据库进程(实例)转化成Java对象供Java程序使用(操作数据库);
ii. 这里首先要了解以下类驱动器的概念:
a. 其实在Java中任何类(Object、String等)想要正常运行,底层都要有相应的驱动器驱动它;
b. 但是我们平时看不出来这些类对象需要什么驱动器驱动啊!那是因为这些基础类的驱动器就是JVM虚拟机本身,其驱动的加载是在底层伴随着JVM的启动进行的,都对用户隐藏起来了,所以你看不到;
c. 而那些不依赖虚拟机驱动的程序(比如非常典型的就是数据库程序、大多数图形程序,基本都是用C/C++编写,肯定不能靠JVM驱动)想在Java中访问就必须自己手动编写加载驱动器的代码了!!
iii. 手动加载类的驱动器——使用Class类的forName静态方法:static Class<?> Class.forName(String className);
a. className就是那个不依赖JVM驱动的外部进程的Java类名,这个类名必须符合Java命名规则,例如“com.xxx.Xxx"之类的;
b. 你在Java中访问外部进程(将外部进程抽象成Java类或者对象)还一定要有Java类名?那这个类名是不是要事先就准备好咯?
c. 是的!并不是任何外部进程都可以被Java访问,想要被Java访问就必须让那个程序自己准备好被Java调用的接口,并事先命名好Java类名才行,而程序准备好的Java接口就是该程序的Java驱动器(让JVM控制程序行为的东西就是Java驱动器);
d. 因此数据库厂商必须自行别写好数据库的Java驱动器(称作数据库Connector,即连接器,用于和Java程序连接),并准备好类名,好让Class.forName加载它;
iv. forName的加载原理:
a. 首先任意一个提供Java接口的程序都会拥有一个Java类名(加载到JVM中就是用该类名来访问该程序实例的);
b. 这样的程序运行后,这个Java类名就会被记录到改程序的进程信息中(而改程序的Java接口(驱动器)的句柄也会被记录到进程信息中);
c. forName传入该类名以后就会到操作系统的进程表中查找具有该Java类名的线程;
d. 找到对应的进程后就会找到该进程对应的Java驱动,然后将该驱动加载进JVM;
e. 之后就可以在Java程序中通过这个类名(或者对象)来调用该进程的功能,或者访问进程中的数据了;
5)数据库厂商对驱动类名的命名:
i. 厂商之间各不相同,而且也没有规律可循,因此必须要查阅相应厂商的JDBC手册才能知道;
ii. MySQL的命名:com.sql.jdbc.Driver
iii. Oracle的命名:oracle.jdbc.driver.OracleDriver
iv. 从命名的包路径来看,各个厂商驱动的实现差异较大;
因此MySQL数据库的加载就是:Class.forName("com.sql.jdbc.Driver");
6)准备好数据库连接器:
i. 必须事先将数据库的JDBC-Connector加入到CLASSPATH路径当中,Connector由数据库厂商提供,而MySQL的JDBC-Connector文件是mysql-connector-java-版本号-bin.jar;
ii. 原因很简单,数据库的JDBC驱动必须要运行起来才能起到作用,在Java中就是要运行该类,而运行一个类首先会想到命令"java 要运行的类的类名“了,既然要直接执行该命令,那就必须得将目标类的路径添加到CLASSPATH中去才行,因此必须先将上面讲的jar包添加到CLASSPATH路径中去才行;
iii. 在Eclipse中这样设置:window -> preferences -> java -> install jres -> 选中当前采用的JRE点击edit -> add external jars -> 选择jar包路径保存即可;
Original: https://www.cnblogs.com/l-926/p/15241693.html
Author: 小新超人
Title: JDBC:加载数据库驱动、连接数据库(详细讲解)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/570233/
转载文章受原作者版权保护。转载请注明原作者出处!