本文使用的环境为Jdk8、使用的数据库为MySQL8
方式一:
Driver driver = new com.mysql.cj.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "2u5k6p2h");
Connection connect = driver.connect(url, properties);
System.out.println(connect);
在方式一中,Driver是oracle官方提供的一个接口,在该接口中声明了connect方法,该接口是官方提供各大数据库厂商的一种规范,所有的数据库厂商都需要遵循,实现该接口。
在代码中com.mysql.cj.jdbc.Driver是mysql数据库实现Driver接口的实现类,在该类中实现了connect方法,该方法有两个参数,第一个参数为url也就是数据库的地址,第二个参数为info该参数为Properties类型,在这个参数中必须传入user和password,其他非必要,该方法返回Connection对象,也就是数据库连接对象。下图为执行结果
方式二:
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver)aClass.newInstance();
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "2u5k6p2h");
Connection connect = driver.connect(url, properties);
System.out.println(connect);
方式二获取连接主要是用反射的方式先获取Driver对象,然后利用该对象获取Connection对象,和方式一区别就是获取Driver的对象的方式不同。
方式三:
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver)aClass.newInstance();
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
DriverManager.registerDriver(driver);
Connection connection = DriverManager.getConnection(url, "root", "2u5k6p2h");
System.out.println(connection);
方式三使用DriverManager类获取Connection对象,该方式先使用 DriverManager.registerDriver注册Driver驱动,然后使用 DriverManager.getConnection获取Connection对象,该方式的结果如下
方式四:
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
Connection connection = DriverManager.getConnection(url, "root", "2u5k6p2h");
System.out.println(connection);
方式四使用Class.forName(“com.mysql.cj.jdbc.Driver”)先加载Driver类,该类中有静态代码块会自动注册驱动,当该类被加载的时候会执行该代码块,所以就不需要手动注册Driver对象了,其他和方式三一致。运行结果如下
方式五:(只对于获取mysql连接有用)
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
Connection connection = DriverManager.getConnection(url, "root", "2u5k6p2h");
System.out.println(connection);
方式五mysql的jar包在导入的时候会自动加载该Driver驱动,原因如下
所以在导入jar包的时候会自动加载Driver驱动类,不需要写Class.forName(“com.mysql.cj.jdbc.Driver”)当然这只对于获取mysql连接有效
该方式的运行结果如下
方式六:
InputStream resourceAsStream = Main.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(resourceAsStream);
Class.forName(properties.getProperty("driver"));
Connection connection = DriverManager.getConnection(properties.getProperty("url"),
properties.getProperty("user"),
properties.getProperty("password"));
System.out.println(connection);
前几种方式耦合性过于过高,该方式只是对于前几种的改进,把Driver,Url,user,password写入到外部文件中,使耦合性降低,编译次数减少,降低打包次数。
总结:
Driver获取Connection的方式虽然可行,但是在实际中获取对象一般使用DriverManage获取,四个参数一般写入外部外部文件中。Class.forName()虽然可以不写,但是只针对于获取mysql连接有效,所以有多种数据库参与的时候,这个最好写入。