步骤
package connection; import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; import java.util.Properties; import org.junit.jupiter.api.Test; public class ConnectionTest { @Test public void test() throws SQLException { //创建Driver实例 Driver driver=new com.mysql.cj.jdbc.Driver(); //获取要读取数据库的URL String url="jdbc:mysql://localhost:3306/test04_emp"; //将账号密码封装到Properties对象中 Properties info=new Properties(); info.setProperty("user", "root"); info.setProperty("password", "abc123"); //通过Driver的对象获取连接 Connection connect=driver.connect(url, info); //调用连接的toString() System.out.println(connect); } }
@Test public void test2() throws Exception { //通过反射的方式获取运行时类 Class clazz=Class.forName("com.mysql.cj.jdbc.Driver"); //通过反射的方式创建运行时类对象 Driver driver=(Driver)clazz.newInstance(); //获取URL String url="jdbc:mysql://localhost:3306/test04_emp"; //封装账号密码 Properties info=new Properties(); info.setProperty("user", "root"); info.setProperty("password", "abc123"); //获取连接 Connection connect=driver.connect(url, info); System.out.println(connect); }
@Test public void test3() throws Exception { //通过反射的方式获取Driver对象 Driver driver=(Driver)Class.forName("com.mysql.cj.jdbc.Driver").newInstance(); //调用DriverManager的registerDriver(Driver driver)方法注册驱动 DriverManager.registerDriver(driver); //提供账号、密码和URL String user="root"; String password="abc123"; String url="jdbc:mysql://localhost:3306/test04_emp"; //调用DriverManager的getConnection()方法来获取连接 Connection connect=DriverManager.getConnection(url,user,password); System.out.println(connect); /*getConnection()还有一种版本:getConnection(String url,Properties info) * 可以参考方法一和方法二。 */ }
注意:这里之所以可以省略创建Driver对象和注册驱动是因为,创建Driver对象的目的是给DriverManager调用registerDriver()注册驱动时提供参数,而在Driver类加载到内存中时,有一个static方法会自动调用registerDriver()方法,从而自动注册驱动。
@Test public void test4() throws Exception { //通过反射将Driver加载到内存中 Class.forName("com.mysql.cj.jdbc.Driver"); //提供相关信息 String user="root"; String password="abc123"; String url="jdbc:mysql://localhost:3306/test04_emp"; //通过getConnection()获取连接 Connection connect=DriverManager.getConnection(url,user,password); System.out.println(connect); }
@Test public void test5() throws Exception { //通过类加载器创建一个指向配置文件的流 InputStream input=ConnectionTest.class.getClassLoader().getResourceAsStream("test.properties"); //创建Properties对象 Properties infoProperties=new Properties(); //以流为参数调用load()加载配置文件 infoProperties.load(input); //获取相关信息 String driver=infoProperties.getProperty("driver"); String url=infoProperties.getProperty("url"); String user=infoProperties.getProperty("user"); String password=infoProperties.getProperty("password"); //加载驱动 Class.forName(driver); //获取连接 Connection connection= DriverManager.getConnection(url, user, password); System.out.println(connection); }
我们通常都使用方式五
第一种方式是直接通过使用指定数据库厂商的驱动来获取数据库连接的,但是我们希望程序具有更好的可移植性,所以采用反射的方式来获取驱动,这就产生了第二种方法;在开发中,我们通常都不使用Driver来获取连接,而是通过使用DriverManager来获得数据库连接,这就从第二种方式到了第三种方式;又因为Driver的实现类中有静态方法调用了regiesterDriver()方法,所以在通过反射的方式将类加载到内存中时,会自动注册驱动,我们可以将注册驱动的过程省略,这就产生了第四种方法;在前面的方法中,我们都是直接把账号密码和URL以及驱动的名称直接写在程序中的额,这不太符合我们日常的规范,也在一定程度上增加了程序的 风险,为此我们将相关信息保存在配置文件中,在程序中通过读取配置文件的方式来获取相关的信息,这就产生了最后一种也是我们最常用的方式。