Java的JDBC编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yubujian_l/article/details/82352466

目录

1. 什么是JDBC

2. JDBC工作原理

3. JDBC使用步骤

3.1 JDBC工作流程

3.2 基于MySQL的JDBC开发案例

4. JDBC常用的接口和类

4.1 JDBC API

4.2 数据库连接

4.3 Statement 对象

4.4  ResultSet 对象


1. 什么是JDBC

现在的应用系统大多数都离不开数据库,Java 程序访问数据库的基本实现方式是通过 JDBC。JDBC(Java DataBase Connectivity,Java 数据库连接)技术的简称,是一种用于执行 SQL 语句的 Java API。 它由一组用 Java 编写的类和接口组成。这个 API 由 java.sql.* 包中的一些类和接口组成,它为数据库开发人员提供了一个标准的 API,使他们能够用纯 Java API 来编写数据库应用程序。

注意:使用 JDBC 访问数据库需要相应数据库的 JDBC 驱动程序。

2. JDBC工作原理

JDBC 为多种关系型数据库提供了统一的访问方式,作为特定厂商数据库访问 API 的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作是有各自数据库厂商提供的。通常把厂商提供的特定用于数据库的访问 API 称为数据库 JDBC 驱动程序。

JDBC 通过特定抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的 API 上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过 JDBC 访问数据库时,仍需要调用特定数据库的访问 API。

3. JDBC使用步骤

3.1 JDBC工作流程

  1. 加载JDBC驱动程序
  2. 建立数据库链接
  3. 创建操作命令
  4. 执行 SQL 语句
  5. 处理结果集
  6. 释放资源

3.2 基于MySQL的JDBC开发案例

准备数据库驱动包(比如:MySQL数据库驱动包

加载JDBC驱动

Class.forName("com.mysql.jdbc.Driver");

 建立数据库连接

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/memo?user=root&password=xyxy&useUnicode=true&characterEncoding=UTF-8");

MySQL数据库连接的URL参数格式如下:
jdbc:mysql://服务器地址:端口号/数据库名?参数名=参数值

创建操作命令(statement)

Statement statement = connection.createStatement();

执行SQL语句

ResultSet resultSet = statement.executeQuery("select (id, name, created_time, modify_time) from memo_group");

处理结果集

while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                Date createdTime = resultSet.getDate("created_time");
                Date modifyTime = resultSet.getDate("modify_time");
                System.out.println(String.format("MemoGroup: id=%d, name=%s, createdTime=%s, modifyTime=%s", id, name, createdTime.toString(), modifyTime.toString()));
            }

释放资源(关闭结果集、命令、连接)

// 关闭结果集
if (resultSet != null) {                
    try {                    
        resultSet.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

// 关闭命令
if (statement != null) {
    try {
        statement.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
            
// 关闭连接
if (connection != null) {
    try {
        connection.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

完整代码:

import java.sql.*;
import java.util.Date;

/**
 * @author: LiuWang
 * @data: 2018/9/4 8:52
 */
public class MemoApplication {

    private static Connection connection;
    private static ResultSet resultSet;
    private static Statement statement;

    public static void main(String[] args) {

        try {
            // 加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 建立连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/memo?" +
            "user=root&password=xyxy&useUnicode=true&characterEncoding=UTF-8");
            // 创建命令
            statement = connection.createStatement();
            // 执行 SQL
            resultSet = statement.executeQuery("select id, name, created_time," +  
                                                    "modify_time from memo_group");
            // 处理结果集
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                Date createdTime = resultSet.getDate("created_time");
                Date modifyTime = resultSet.getDate("modify_time");
                System.out.println(String.format("MemoGroup: id=%d, name=%s, createdTime=%s, " + 
                        "modifyTime=%s", id, name, createdTime.toString(), modifyTime.toString()));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭结果集
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            // 关闭命令
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            // 关闭连接
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

4. JDBC常用的接口和类

4.1 JDBC API

在 Java JDBC 编程中对数据库的操作均使用 JDK 自带的 API 统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握 Java JDBC API(位于 java.sql 包下)即可掌握 Java 数据库编程。

4.2 数据库连接

Connection 接口实现类有数据库提供,获取 Connection 对象通常有两种方式:一种是通过 DriverManager 的静态方式获取,一种是通过 DataSource(数据源)对象获取。实际应用中会使用 DataSource 对象

4.3 Statement 对象

Statement 对象主要是将 SQL 语句发送到数据库中。JDBC API 中主要提供了三种 Statement 对象。

  • Statement接口的对象用于执行简单的不带参数的SQL语句。
  • PrepareStatement接口的对象用于执行预编译过的SQL语句,SQL语句被预编译后,存在PreparedStatement对象中,然后可以使用该对象高效的多次执行该语句。
  • CallbleStatement接口的对象用于执行一个数据库的存储过程。

主要需要掌握的两种执行 SQL 的方法:

  • executeQuery() 方法执行后返回单个结果集,通常用于 select 语句
  • executeUpdate() 方法的返回值是一个整数,表示受影响的行数,通常用于 update、insert、delete 语句。 

4.4  ResultSet 对象

ResultSet 对象被称为结果集,它代表复合 SQL 语句条件的所有行,并且它通过一系列的 getXXX 方法提供了对这些行中数据的访问。

ResultSet 里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条数据,就要使用 ResultSet 的 next() 方法,如果我们想要得到 ResultSet 里的所有记录,就应该用 while 循环。

猜你喜欢

转载自blog.csdn.net/yubujian_l/article/details/82352466