day45-JDBC和连接池01( 二 )


day45-JDBC和连接池01

文章插图
在SQL yog中执行语句查询,发现actor表中成功插入一条数据
day45-JDBC和连接池01

文章插图
2.2数据库连接的5种方式2.2.1方式1//获取Driver实现类对象Driver driver = new com.mysql.jdbc.Driver();String url = "jdbc:mysql://localhost:3306/jdbc_db";Properties info = new Properties();info.setProperty("user", "root");//用户info.setProperty("password", "123456");//密码Connection conn = driver.connect(url,info);System.out.println(conn);2.2.2方式2方式1会直接使用com.mysql.jdbc.Driver(),属于静态加载,灵活性差,依赖性强
方式2使用反射机制进行动态加载 , 而且信息可以放入配置文件中保存,更利于项目的控制
day45-JDBC和连接池01

文章插图
例子
package li.jdbc;//分析java连接mysql的5种方式import com.mysql.jdbc.Driver;import org.junit.Test;import java.sql.Connection;import java.util.Properties;public class jdbcConn {//方式2@Testpublic void connect02() throws Exception {//使用反射加载Driver类,动态加载,更加地灵活,减少依赖性Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");Driver driver = (Driver)aClass.newInstance();String url = "jdbc:mysql://localhost:3306/hsp_db02";//将 用户名和密码 放入到 Properties对象中Properties properties = new Properties();// user 和 password 是规定好的,后面的值根据实际情况写properties.setProperty("user", "root");//用户properties.setProperty("password", "123456");//密码Connection connect = driver.connect(url, properties);System.out.println("方式2="+connect);}}2.2.3方式3在方式2的基础上使用DriverManager替换Driver
day45-JDBC和连接池01

文章插图
day45-JDBC和连接池01

文章插图
day45-JDBC和连接池01

文章插图
day45-JDBC和连接池01

文章插图
例子
package li.jdbc;import com.mysql.jdbc.Driver;import org.junit.Test;import java.sql.Connection;import java.sql.DriverManager;public class jdbcConn {//方式3 使用DriverManager替换Driver进行统一管理@Testpublic void connect03() throws Exception {//使用反射加载Driver类Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");Driver driver = (Driver)aClass.newInstance();//创建 url和 user 和 passwordString url = "jdbc:mysql://localhost:3306/hsp_db02";String user = "root";String password = "123456";DriverManager.registerDriver(driver);//注册Driver驱动Connection connection = DriverManager.getConnection(url, user, password);System.out.println("方式3="+connection);}}2.2.4方式4使用Class.forName自动完成注册驱动,简化代码
day45-JDBC和连接池01

文章插图
例子
//方式4 使用Class.forName自动完成注册驱动,简化代码// 这种方式获取连接是使用得最多的,推荐使用@Testpublic void connect04() throws Exception {//使用反射加载Driver类//在加载Driver类时 , 完成了注册/*** 在 Driver类的源码中:* 1.静态代码块在类加载时会执行一次* 2.DriverManager.registerDriver(new Driver());* 3.因此 注册Driver的工作已经在底层完成了*static {*try {*DriverManager.registerDriver(new Driver());*} catch (SQLException var1) {*throw new RuntimeException("Can't register driver!");*}*}*/Class.forName("com.mysql.jdbc.Driver");//创建 url和 user 和 passwordString url = "jdbc:mysql://localhost:3306/hsp_db02";String user = "root";String password = "123456";Connection connection = DriverManager.getConnection(url, user, password);System.out.println("方式4="+connection);}方法4相比于方法3 , 减少了注册驱动的操作,但是连接数据库的步骤不是需要注册驱动吗?为什么可以这样呢?
在Driver类的源码中,我们可以看到有这样的一个静态代码块:
day45-JDBC和连接池01

文章插图
而静态代码块在类加载时会执行一次,在使用反射加载Driver类时,就执行了DriverManager.registerDriver(new Driver());语句 。
即在加载Driver类时,完成了注册 。因此,可以在程序中省略注册的步骤 。
注意:
  1. mysql驱动5.1.6之后连Class.forName("com.mysql.jdbc.Driver");也不需要写了
  2. 从jdk1.5以后使用了jdbc4,不再需要显式调用Class.forName()注册驱动,而是自动调用驱动jar包下的

    推荐阅读