JDBC接口(API)
- 提供了一套纯粹的JAVA API给应用程序开发者
- 提供了一套低级别的JDBC driver API给数据库驱动开发者
应用程序开发者借助于API用于开发可以访问数据库的程序; 驱动开发者借助于API提供服务到JDBC
而提供给数据库驱动开发者的API则正好是为了实现提供给应用程序开发者的这套API,这句话有些令人迷惑
JDBC是对数据库操作访问的薄层封装,应用程序开发者借助于JDBC可以实现对数据库的操作访问,但是,最终提供的服务仍旧是具体的数据库实现了具体SQL的执行 所以JDBC提供给应用程序开发者的API就是开发者使用JDBC数据库的接口而提供给数据库驱动开发者的API则恰恰是为了让数据库驱动开发者来提供服务
通过DriverManager类的getConnection()方法建立数据库连接
代码语言:javascript复制public Connection myTest01() throws Exception{
// 1.准备连接数据库的4个字符串
// 驱动的全类名
String driverClass = null;
// JDBC URL
String jdbcUrl = null;
// user
String user = null;
// password
String password = null;
// 读取类路径下的jdbc.properties 文件
InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(in);
driverClass = properties.getProperty("driver");
jdbcUrl = properties.getProperty("jdbcUrl");
user = properties.getProperty("user");
password = properties.getProperty("password");
// 2. 加载数据库驱动程序
Class.forName(driverClass);
// 3. 通过DriverManager 的getConnection()方法获取数据库连接
Connection connection = DriverManager.getConnection(jdbcUrl,user,password);
return connection;
}
代码语言:javascript复制// 注册驱动的两种写法
DriverManager.registerDriver(Class.forName(driverClass).newInstance) // 第一种写法
Class.forName(driverClass); // 第二种写法
// 支持第二种写法的原因是 在加载驱动的时,com.mysql.cj.jdbc.Driver中有静态代码块会被执行,静态代码块创建了当前类的实例,注册到了DriverManager,所以可以直接用第二种写法
// 以下源码
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}