I:使用第三方提供的API实例化Driver的实现类(进阶一)
Driver driver = new com.mysql.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/test";
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "123");
Connection conn = driver.connect(url, info);
System.out.println(conn);
II:使用Sun公司提供的API实例化Driver的实现类(进阶二)
Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
String url = "jdbc:mysql://localhost:3306/test";
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "123");
Connection conn = driver.connect(url, info);
System.out.println(conn);
III:使用DriverManager实现类替换Driver的实现类(进阶三)
Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123";
DriverManager.registerDriver(driver);
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
IV:使用DriverManager实现类优化上述连接的操作(进阶四)
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123";
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
V:将四个连接的基本信息声明在src目录下的配置文件中(最终版)
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
Class.forName(driverClass);
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
备注:JDBC的获取连接的小结:
- 进阶四省略了注册驱动的操作,这是因为在MySQL的Driver实现类中,声明了如下的操作:
static{
try{
java.sql.DriverManager.registerDriver(new Driver());
}catch(SQLException e){
throw new RuntimeException("Can't register driver!");
}
}
- 最终版的好处:
- 实现了数据与代码的分离,实现了解耦
- 可以直接修改配置文件的信息,可以避免程序重新打包
- 关于 Driver 接口:
- java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口,这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现
- 不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类 java.sql.DriverManager 去调用这些 Driver 实现类的结构
- Oracle 的驱动:oracle.jdbc.driver.OracleDriver
- MySQL 的驱动:com.mysql.jdbc.Driver
- JDBC 的 URL 标准由 jdbc:子协议:子名称 三部分组成:
- 协议:JDBC URL 中的协议总是 jdbc
- 子协议:子协议用于标识一个数据库驱动程序
- 子名称:一种标识数据库的方法,子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
- 几种常用的 JDBC URL 数据库:
- Oracle 的连接:jdbc:oracle:thin:@localhost:1521:atguigu
- SQLServer 的连接:jdbc:microsoft:sqlserver//localhost:1433;DatabaseName=sid
- MySQL 的连接:jdbc:mysql://localhost:3306/atguigu
- MySQL 8.0 以上的驱动连接的配置参数变化:
- driverClass:com.mysql.cj.jdbc.Driver
- url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&rewriteBatchedStatements=true