JDBC详解,快速复习JDBC原理

本文介绍了JDBC(JavaDatabaseConnectivity)的基本概念和作用,包括JDBC驱动管理器、常用API如Driver、DriverManager、Connection、Statement、PreparedStatement和ResultSet等,并展示了如何实现第一个JDBC程序来从数据库读取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、JDBC

二、JDBC常用API

三、实现第一个JDBC程序

四、参考文献


一、JDBC

        在web开发中,大量使用数据库来存储和管理数据。而使用java语言来控制数据库,则需要一种工具——“JDBC”

        JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。应用程序使用JDBC访问数据库的方式如下图所示:

使用JDBC访问特定的数据库,需要与不同的数据库驱动进行连接。

 由于不同数据库厂商提供的数据库驱动不同,JDBC不仅需要提供访问数据库的API,还需要封装与各种数据库服务器通信API。如下图:

 

从上图分析,JDBC的实现主要为三部分:

(1)JDBC驱动管理器:负责注册特定的JDBC驱动器,主要通过java.sql. Driver Manager类实现。

(2)JDBC驱动器API:由Sun公司负责制定,其中最主要的接口是java.sql. Driver接口。

(3)JDBC驱动器:它是一种数据库驱动,由数据库厂商创建,也称为JDBC驱动程序JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接,以及处理通信细节。(简单理解就是各个数据库专有连接驱动器,例如Mysql的驱动器)

二、JDBC常用API

JDBC API主要位于java.sql包中,该包定义了一系列访问数据库的接口和类,具体如下。

1. Driver接口

        Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。在编写JDBC程序时,必须要把指定数据库驱动程序或类库加载到项目的classpath中。

2. DriverManager类

        Driver Manager类用于加载JDBC驱动并且创建与数据库的连接。在Driver Manager类中,定义了两个比较重要的静态方法。如表所示:

①registerDriver ,向 DriverManager中注册给定的JDBC驱动程程序

registerDriver(Driver driver) 

②getConnection 用于建立和数据库的连接,并返回表示连接的 Connection对象

getConnection(String url,String user,String pwd)

3、Connection接口

        Connection接口代表Java程序和数据库的连接,在Connection接口中,定义了一系列方法,具体如表所示。

常用的列举如下:
getMetaData()
该方法用于返回表示数据库的元数据的 DatabaseMetaData对象

createStatement()
用于创建一个Statement对象来将SQL语句发送到数据库

prepareStatement(String sql)
用于创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库

prepareCall(String sql)
用于创建一个CallableStatement对象来调用数据库存储过程

 4、Statement接口

        Statement接口用于向数据库发送SQL语句,在Statement接口中,提供了三个执行SQL语句的方法,具体如表所示。

5. PreparedStatement接口

        PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。在PreparedStatement接口中,提供了一些基本操作的方法,具体如表下所示。

executeUpdate()

在此PreparedStatement对象中执行SQL语句,该语句必须是个DML语句或者是无返回内容的SQL语句,比如DDL语句。

DDLData Definition Language数据库定义语言

CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME

数据操纵语言(Data Manipulation Language, DML)是用于数据库操作

SELECT
INSERT
UPDATE
DELETE
MERGE
CALL
EXPLAIN PLAN
LOCK TABLE

executeQuery()

在此PreparedStatement对象中执行SQL查询,该方法返回的ResultSet对象

6、CallableStatement接口

        CallableStatement是PreparedStatement的子接口,用于执行SQL存储过程。在Callablestatement按接口中,提供了一些基本操作的方法,具体下表所示:

7、ResultSet接口

        ResultSet接口表示 select查询语句得到的结果集,该结果集封装在一个逻辑表格中。在 ResultSet接口内部有一个指向表格数据行的游标,ResultSet对象初始化时,游标在表格的第一行之前。下表中列举了ResultSet接口中的常用方法。

常见的 JDBC 组件

JDBC 的 API 提供了以下接口和类:

DriverManager :这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。

Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。

Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,即,所有与数据库的通信仅通过这个连接对象进行。

Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。

ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。

SQLException : 这个类处理发生在数据库应用程序的任何错误。

三、实现第一个JDBC程序

(1) 加载并注册数据库驱动,具体方式如下。

DriverManager.registerDriver(Driver driver);

(2) 通过Driver Manager获取数据库连接,具体方式如下。

Connection conn= DriverManager.getConnection(String url, String user, String pass);
从上述方式可以看出,getConnection()方法中有三个参数,它们分别表示数据库url、登录数据库的用户名和密码。

Mysql数据库例子:jdbc:mysql://hostname:port/databasename

(3)通过Connection对象获取Statement对象。Connection创建Statement的方式有如下三种。

① createStatement(): 创建基本的Statement对象。

② prepareStatement(): 创建PreparedStatement对象。

③ preparCall(): 创建CallableStatement对象。

以创建基本的Statement对象为例,具体方式如下。

Statement stmt=conn.createStatement();

(4)使用Statement执行SQL语句。所有的Statement都有如下三种方法来执行语句。

①execute():可以执行任何SQL语句。

②executeQuery():通常执行查询语句,执行后返回代表结果集的Resultset对象。

③executeUpdate():主要用于执行DML和DDL语句。执行DML语句,如INSERT、UPDATE或 DELETE时,返回受SQL语句影响的行数,执行DDL语句返回0。

以executeQuer()方法为例,具体方式如下。

//执行SQL语句,获取结果集ResulSet
ResultSet rs=stmt.executQuery(sql);

(5)操作ResultSet结果集。如果执行的SQL语句是查询语句,执行结果将返回Resultset对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。 ResultSet对象提供的方法主要可以分为以下两类。

①next()、previous()、first()、last()、beforeFirst()、afterLast()、absolute()等移动记录指针的方法

②getXxx()获取指针指向行,特定列的值。

(6)回收数据库资源。关闭数据库连接,释放资源,包括关闭ResultSet、Statement和Connection等资源。

编写第一个JDBC程序,改程序从user表中读取数据,并将结果结果打印在控制台,具体步骤入戏所示。

package com.jdbc.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Date;
public class Example01 {
    public static void main(String[] args) throws SQLException {
        //1.注册数据库的驱动
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        //Class.forName("com.mysqk.jdbc.Driver");

        //2.通过 DriverManager获取数据库连接
        String url="jdbc:mysql://localhost:3306/Example";
        String usernames="root";
        String password="xxxxxx";
        Connection conn=DriverManager.getConnection(url, username, password);
        //3.通过 Connection对象获取 Statement对象
        Statement stmt= conn.createStatement();
        //4.使用 Statement执行SQL语句
        String sql="select * from users";
        ResultSet rs=stmt.executeQuery(sql);
        //5、操作 ResultSet结果集
        
        while (rs.next()) {
            //通过列名获取指定字段的值
            int id=rs.getInt("id");     
            String name=rs.getString("name");
            String psw=rs.getString("password");
            String email=rs.getString("email");
            System.out.println(id+"___"+name+"___"+psw+"___"+email); 
        }
        //6.回收数据库  关闭连接
        rs.close();
        stmt.close();
        conn.close();
    }
}

1、注册驱动

在注册数据库驱动时,虽然DriverManager.registerDriver(new com. mysql.jdbc.Driver())方法可以完成,但会使数据库驱动被注册两次。这是因为Driver类的源码中,已经在静态代码块中完成了数据库驱动的注册。所以,为了避免数据库驱动被重复注册,只需要在程序中加载驱动类即可,具体加载方式如下所示。

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

2、释放资源

由于数据库资源非常宝贵,数据库允许的并发访问连接数量有限,因此,当数据库资源使用完毕后,一定要记得释放资源。为了保证资源的释放,在Java程序中,应该将最终必须要执行的操作放在finally代码块中,具体方式如下。

if(rs!=null) {
    try {
        rs.close();
    }catch (SQLException e) {
        e.printStackTrace();
    }
    rs=null;
}
if(stmt!=null) {
    try {
        stmt.close();
    }catch (SQLException e) {
        e.printStackTrace();
    }
    stmt=null;
}
if(conn!=null) {
    try {
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    conn=null;
}

四、参考文献

什么是JDBC?这篇文章告诉你 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值