暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用JDBC连接MySQL的四种方式

视界的接口 2020-12-01
160

JDBC简介

JDBC是Java DataBase Connectivity的缩写,既Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口。

JDBC是一套接口规范,而接口并不能直接实例化,而是必须实例化对应的 实现类
,然后通过接口引用这个实例。那么JDBC接口的实现类在哪?

因为JDBC接口并不知道我们要使用哪个数据库,所以,用哪个数据库,我们就去使用哪个数据库的 实现类
,我们把某个数据库实现了JDBC接口的jar包称为JDBC驱动

获取连接MySQL的连接对象

java.sql下提供了一个接口 Driver
,它是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

  • 方法一


    获取Driver对象,调用connect方法,方法需要url和用户名和密码,此时返回的就是连接对象。

    这里Driver是一个接口,而实现这个接口的是数据库驱动,所以声明Driver对象时应该找到驱动的实现类(com.mysql.jdbc.Driver)。具体代码如下:

  try {
//1.提供java.sql.Driver接口实现类的对象
Driver driver = null;
driver = new com.mysql.jdbc.Driver();


//2.提供url,指明具体操作的数据
String url = "jdbc:mysql://localhost:3306/test";


//3.提供Properties的对象,指明用户名和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "abc123");


//4.调用driver的connect(),获取连接
Connection conn = driver.connect(url, info);
System.out.println(conn);
} catch (SQLException e) {
e.printStackTrace();
}
复制


  • 方法二


    根据java编码规范,方法一中出现了第三方的API,所以对方法一进行迭代

    解决方案:利用反射来获取MySQL的Driver的实现类对象。修改的代码如下

Class clazz = Class.forName(driverName);
Driver driver = (Driver) clazz.newInstance();
复制
  • 方法三


    使用DriverManager管理JDBC驱动,来替代Driver。

    DriverManager是一个类,其中getConnect(String url,String user,String password)方法是获取连接的方法。但前提还需要使用它的registerDriver(方法)注册驱动。代码如下:

try {
//1.数据库连接的4个基本要素:
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "abc123";
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);
System.out.println(conn);
} catch (Exception e) {
e.printStackTrace();
}
复制
  • 方法四


    优化方法三,只需要 Class.forName(com.mysql.jdbc.Driver);这一行代码便可以加载Driver。因为在Driver实现类的源码里已经调用了 java.sql.DriverManager
    并完成了对Driver的加载。最终代码如下:

    try {
    //1.数据库连接的4个基本要素:
    String url = "jdbc:mysql://localhost:3306/test";
    String user = "root";
    String password = "abc123";
    String driverName = "com.mysql.jdbc.Driver";


    //2.加载驱动 (①实例化Driver ②注册驱动)
    Class.forName(driverName);




    //Driver driver = (Driver) clazz.newInstance();
    //3.注册驱动
    //DriverManager.registerDriver(driver);
    /*
    可以注释掉上述代码的原因,是因为在mysql的Driver类中声明有:
    static {
    try {
    DriverManager.registerDriver(new Driver());
    } catch (SQLException var1) {
    throw new RuntimeException("Can't register driver!");
    }
    }


                 */
                 
    //3.获取连接
    Connection conn = DriverManager.getConnection(url, user, password);
    System.out.println(conn);
    } catch (Exception e) {
    e.printStackTrace();
    }
    复制

说明:不必显式的注册驱动了。因为在DriverManager的源码中已经存在静态代码块,实现了驱动的注册。


文章转载自视界的接口,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论