java-jdbc,加载数据库驱动

发布网友 发布时间:2022-04-23 20:26

我来回答

1个回答

热心网友 时间:2022-04-07 16:58

Java语言本身只提供了数据库连接和操作接口,而实现这些接口的就是数据库厂商了,所以每次你要连接数据库就必须下载对应数据库厂商的JDBC驱动,也就是接口实现程序。这个需要持久的预设环境,就是你必须告诉你的程序你的接口实现程序在哪。也就是哪个jdbc驱动程序的包在哪,java程序在连接数据库之前需要通过反射机制创建jdbc驱动程序包中的所有类。追问如何告诉程序我的接口程序在哪儿~是把路径添加到CLASSPATH里吗?

我就是看文档的时候说可以将 jdbc.drivers=~;

写入System的properties里面,当DriverManager调用任意方法时会隐式的去加载properties里面加载jdbc.drivers的驱动,但是网上说到这个时候就说需要持久的预设环境,否则不如Class.forName()保险

实在不理解预设环境是啥~

追答DriverManager 类包含一列Driver 类,它们已通过调用方法DriverManager.registerDriver 对自己进行了注册。所有Driver 类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时DriverManager 类进行注册。这样,用户正常情况下将不会直接调用DriverManager.registerDriver;而是在加载驱动程序时由驱动程序自动调用。
加载Driver 类,然后自动在DriverManager 中注册的方式有两种:
通过调用方法Class.forName。这将显式地加载驱动程序类。由于这
与外部设置无关,因此推荐使用这种加载驱动
程序的方法。以下代码加载类

acme.db.Driver:Class.forName("acme.db.Driver");
如果将acme.db.Driver 编写为加载时创建实例,并调用以该实例为参数的
DriverManager.registerDriver(),则它在DriverManager 的驱动程序列表中,并可用于创建连接。通过将驱动程序添加到 java.lang.System 的属性 jdbc.drivers 中。
这是一个由DriverManager 类加载的驱动程序类名的列表,由冒号分隔:初始化
DriverManager 类时,它搜索系统属性jdbc.drivers,如果用户已输入了一个或多个驱动程序,则DriverManager 类将试图加载它们。对DriverManager 方法的第一次调用将自动加载这些
驱动程序类。
注意:加载驱动程序的第二种方法需要持久的预设环境。如果对这一点不能保证,则调用方法
Class.forName 显式地加载每个驱动程序就显得更为安全。这也是引入特定驱动程序的方法,因为一旦DriverManager 类被初始化,它将不再检查jdbc.drivers 属性列表。
在以上两种情况中,新加载的Driver 类都要通过调用DriverManager.registerDriver
类进行自我注册。如上所述,加载类时将自动执行这一过程。
由于安全方面的原因,JDBC 管理层将跟踪哪个类加载器提供哪个驱动程序。这样,当
DriverManager 类打开连接时,它仅使用本地文件系统或与发出连接请求的代码相同的类加载器提供的驱动程序。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com