获取数据库连接
2.1要素一:Driver接口的实现类
2.1.1Driver接口介绍
- java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现,也就是说要调用jdbc的jar,必须需要实现driver接口
- 在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理类(java.sql.DriverManager)去调用这些Driver实现
1.Oracle的驱动:oracle.jdbc.driver.OracleDriver
2.mySql的驱动:com.mysql.jdbc.Driver
将jdbc的jar包导入工程
注意:如果是Dynamic Web Project(动态的web项目),则是把驱动jar放到WEB目录下的WEB-INF目录下中lib目录中即可
2.1.2加载与注册JDBC驱动
- 加载驱动:加载jdbc驱动(jdbc的jar包)需要调用Class类的静态forName(),向其传递要加载的JDBC驱动的类名
class.forName(“com.mysql.jdbc.Driver”)
- 注册驱动:DriverManager类是驱动程序类,负责管理驱动程序
1.使用DriverManager.registerDriver(com.mysql.jdbc.Driver)来注册驱动
2.通常不用显示调用DriverManager类的registerDriver()方法来注册驱动程序类的实例,因为Driver接口的驱动程序类都包含了静态代码块中,会调用DriverManager.registerDriver()方法来注册自身的一个实例
2.2要素二:URL
JDBC URL用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接
JDBC URL的标准由三部分组成,各部分间用冒号分隔
- jdbc:子协议:子名称
- 协议:JDBC URL中的协议总是jdbc
- 子协议:子协议用于标识一个数据库或驱动程序
- 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库,提供足够的信息,包含主机名(对应服务端的ip地址),端口号,数据库名
- 举例:
2.3要素三:用户名和密码
- user,password可以用”属性名=属性值”方式告诉数据库
- 可以调用DriverManager类的getConnection()方法建立到数据库的连接
2.4数据库连接方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import org.junit.Test;
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties;
public class testConnection1 {
@Test public void getconnection5() throws IOException, ClassNotFoundException, SQLException { InputStream is =testConnection1.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(is);
String user = properties.getProperty("user"); String password = properties.getProperty("password"); String url = properties.getProperty("url"); String driverClass = properties.getProperty("driverClass");
Class.forName(driverClass);
Connection conn = DriverManager.getConnection(url,user,password); System.out.println(conn); } }
|
其中对第三步的加载驱动的说明,Driver.class在背后做了手脚
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| Class.forName(driverClass);
Driver driver = (Driver) clazz.newInstance();
DriverManager.registerDriver(driver)
package com.mysql.cj.jdbc;
import java.sql.DriverManager; import java.sql.SQLException;
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!"); } } }
|
其中,配置文件声明在工程的src目录下:【jdbc.properties】
1 2 3 4
| user=root password=admin url=jdbc:mysql://localhost:3306/test driverClass=com.mysql.jdbc.Driver//指明驱动类型
|
说明:使用配置文件的方式保存配置信息,在代码中加载配置文件
使用配置文件的好处
- 实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
- 如果修改了配置信息,省去重新编译的过程
2.5补充:加载properties文件的两种方式
1 2 3 4 5 6 7 8 9 10 11
| Properties properties=new Properties();
1、获取class目录下的配置文件 InputStream is = classLoader.getResourceAsStream("re.properties"); properties.load(is); 2、 properties.load(new FileInputStream("src\\re.properties"));
|