JDBC连接步骤以及JDBC注册数据库驱动的意思

参考:

彻底搞懂JDBC的运行过程

JDBC注册数据库驱动,啥意思?

 

笔记:

JDBC的连接步骤

执行一次JDBC连接,分六个步骤进行:

1. 导入包

在程序中包含数据库编程所需的JDBC类。大多数情况下,使用 import java.sql.* 就足够了。

2. 注册JDBC驱动程序

需要初始化驱动程序,这样就可以打开与数据库的通信。

 JDBC是一套规范(通俗的说就是一套接口),它本身是没有针对具体数据库操作提供实现的, 所以谁要让自家的数据库适配JDBC,就实现这套接口即可。一般叫实现JDBC规范的jar包为JDBC驱动(我们通过JDBC接口执行数据库操作命令,具体让数据库操作的是驱动程序)。 
  // JDBC驱动包名和数据库的URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL      = "jdbc:mysql://localhost/test";

    // 数据库名和密码自己修改
    static final String USER = "username";
    static final String PASS = "password";
//STEP 2: 注册JDBC驱动程序
        try {
            Class.forName(JDBC_DRIVER);
            //它会导致类中的静态变量会被初始化,静态代码块也会被执行。
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

主要目的都是为了执行com.mysql.jdbc.Driver对象中的static方法来注册Driver进入DriverManager。

通过class.forName()加载注册驱动 括号里面是com.数据库名.jdbc.Driver ,Driver 类的底层会有静态代码块加载注册驱动,使java连接到sql语句,同时实现连接数据库的方法都被各大数据库厂商封印在jar包中,直接使用即可,我们要做的就是第一步就是注册驱动身份验证,才能进入数据库。
static {
try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
    }
}
等价于:
Driver driver=new com.mysql.jdbc.Driver();  
Connection conn=driver.connect(url, info); 


最后,JDBC4.0提供了驱动自动加载,DriverManager中的getConnection和getDrivers方法作了改进,以支持Java SE 服务提供商机制(SPM)。可以在驱动jar包中找到META-INF/services/java.sql.Driver文件,我的MySQL驱动版本是5.1.38,这个文件打开后是这样的:
所以写点小程序的话可以不用写Class.forName("com.mysql.jdbc.Driver")这一行了~
 
从 JDBC 4.0 ( JDK 1.6 ) 开始,应用程序不再需要显式地使用Class.forName("驱动名称")加载驱动程序了,DriverManager 开始能够自动地承担这项任务(在DriverManager 载入时会自动加载驱动)。
 

3. 打开一个连接

使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接。

4. 执行一个查询

需要使用一个类型为Statement或PreparedStatement的对象(两者区别看后文),并提交一个SQL语句到数据库执行查询。

5. 从结果集中提取数据

这一步中演示如何从数据库中获取查询结果的数据。使用ResultSet.getXXX()方法来检索的数据结果

6. 清理环境资源

在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费。本文使用了try with resources方式关闭资源,这是JDK7的语法糖,读者可自行搜索。

完整代码:

//STEP 1. 导入包
import java.sql.*;

class JDBCExample {
    // JDBC驱动包名和数据库的URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL      = "jdbc:mysql://localhost/test";

    // 数据库名和密码自己修改
    static final String USER = "username";
    static final String PASS = "password";

    public static void main(String[] args) {
        String sql = "SELECT id, first, last, age FROM Employees";

        //STEP 2: 注册JDBC驱动程序
        try {
            Class.forName(JDBC_DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        // try with resources方式关闭资源。
        //STEP 6: 清理环境资源
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(sql)) {

            //STEP 3: 打开一个连接
            System.out.println("Connecting to database...");
//            Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);

            //STEP 4: 执行一个查询
            System.out.println("Creating statement...");
//            Statement stmt = conn.createStatement();
//            ResultSet rs = stmt.executeQuery(sql);

            //STEP 5: 从结果集中提取数据
            while (rs.next()) {
                // 根据列名获取数据
                int id = rs.getInt("id");
                int age = rs.getInt("age");
                String first = rs.getString("first");
                String last = rs.getString("last");

                // 显示结果
                System.out.print("ID: " + id);
                System.out.print(", Age: " + age);
                System.out.print(", First: " + first);
                System.out.println(", Last: " + last);
            }
        } catch (SQLException se) {
            // 处理可能出现的错误
            se.printStackTrace();
        }
        System.out.println("Goodbye!");
    }
}
posted @ 2021-11-05 13:52  旷野之息  阅读(485)  评论(0编辑  收藏  举报