本文以java连接mysql为例讲解;仅仅记录了一部分知识点,其余我还没学完,后面会补充!初学JDBC文章仅仅是我个人对知识点的理解,请谨慎参考!
目录
我们在导入mysql-connector-java.jar包后,我们如何才能让自己的项目去连接mysql呢?
首先在连接数据库之前我们需要下载jar包并导入,在jar中有java与mysql建立连接的方法,那就是jar包里面的com.mysql.jdbc.Driver类----驱动,我们怎么样才能在项目启动时调用jar包里的Driver以及其他方法呢?我们清楚在java中万事万物皆对象,所以我们想要调用Driver类及Driver类中的方法我们就需要创建一个Driver类对象,
- //1.数据库连接的4个基本要素:
- String url = "jdbc:mysql://localhost:3306/test"; String user = "root";
- String password = " ";
- String driverName = "com.mysql.jdbc.Driver";
- //2.实例化Driver
- Class clazz = Class.forName(driverName);
- Driver driver = (Driver) clazz.newInstance();
- //3.注册驱动
- DriverManager.registerDriver(driver);
- //4.获取连接
- Connection conn = DriverManager.getConnection(url, user, password);
然而在项目中我们常通过反射技术Class.forName(“com.mysql.jdbc.Driver”),把Driver类加载进内存。来取代上面繁琐的创建对象过程,为什么可以这样呢?通过源码我们可以看到Driver里有个内置的静态代码块,在进入内存时会Driver类会初始化,静态代码块里的代码也会被执行。
- static {
- try {
- java.sql.DriverManager.registerDriver(new Driver()); // 注册驱动
- } catch (SQLException E) {
- throw new RuntimeException("Can't register driver!");
- }
- }
这里说的注册驱动,指的是将java.sql.Driver实现类(对于连接mysql数据库来说,驱动就是mysql .com.mysql.cj.jdbc.Driver)注册到DriverManager.registeredDrivers 存储驱动信息的集合中。
使用Class.forName("com.mysql.cj.jdbc.Driver")来注册驱动。仅看代码只是加载了这个类,并没有显示的注册驱动,那为什么还可以注册上去呢?打开com.mysql.cj.jdbc.Driver时,我们可以看到,静态代码块中会执行注册驱动的方法,而加载这个类时,静态代码块会被执行。所以Class.forName();可以注册驱动;
- public class Driver extends NonRegisteringDriver implements java.sql.Driver {
- // Register ourselves with the DriverManager
- static {
- try {
- java.sql.DriverManager.registerDriver(new Driver()); // 注册驱动
- } catch (SQLException E) {
- throw new RuntimeException("Can't register driver!");
- }
- }
- /**
- * Construct a new driver and register it with DriverManager
- *
- * @throws SQLException
- * if a database error occurs.
- */
- public Driver() throws SQLException {
- // Required for Class.forName().newInstance()
- }
- }
通过以上代码我们可以看出Driver内置静态代码块中调用了java.sql.DriverManager的方法registerDriver(Driver driver)完成了注册驱动;
最后通过驱动管理器DriverManager的getConnection方法去获取Connection与数据库建立连接
- //1.数据库连接的4个基本要素:
- String url = "jdbc:mysql://localhost:3306/test";
- String user = "root";
- String password = " ";
- String driverName = "com.mysql.jdbc.Driver";
- //2.加载驱动 (①实例化Driver ②注册驱动)
- Class.forName(driverName);
- //3.获取连接
- Connection conn = DriverManager.getConnection(url, user, password);