jdbc工具包

news2025/3/11 3:26:33

JDBC工具类

介绍

JDBC全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的JavaAPI。应用程序可通过这台API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。

JDBC实现细节

img

从上图可以看出,JDBC的实现包括三部分

  1. JDBC驱动管理器:负责注册特定的JDBC驱动器,主要通过Java.sql.DriverManager类
  2. JDBC驱动器API:由Sun公司负责制定,其中最主要的接口是java.sql.Driver接口
  3. JDBC驱动器:它是一种数据库驱动,由数据库厂商创建,也称为JDBC驱动程序,JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接,以及处理通信细节。

JDBC常用API

1、Driver接口

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

2、DriverManager接口

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

方法名称功能描述
registerDriver(Driver driver)该方法用于向DriverManager中注册给定的JDBC驱动程序
getConnection(String url, String user, String pwd)该方法用于建立和数据库的连接,并返回表示连接的Connection对象

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语句的方法,具体如下表:

方法名称功能描述
execute(String sql)用于执行各种sql语句,该方法返回一个boolean类型的值,如果为true,表示所执行的SQL语句具备查询结果,可通过Statement的getResultSet方法获得查询结果
executeUpdate(String sql)用于执行SQL中的insert、update和delete语句。该方法返回一个int类型的值,表示数据库中受该SQL语句影响的行数
executeQuery(String sql)用于执行SQL中的select语句,该方法返回一个表示查询结果的ResultSet对象

5、preparedStatement接口

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

方法名称功能描述
executeUpdate()在此ProparedStatement对象中执行SQL语句,该语句必须是个DML语句或者是无返回内容的SQL语句,比如DDL语句
executeQuery()在此PreparedStatement对象中执行SQL语句查询,该方法返回的ResultSet对象
setInt(int parameterIndex, int x)将指定参数设置为给定的int值
setFloat(int parameterIndex, float x)指定参数设置为给定的float值
setString(int parameterIndex, String x)将指定参数设置为给定的String值
setDate(int parameterIndex, Date x)将指定参数设置为给定的Date值
addBatch()将一组参数添加到此PreparedStatement对象的批处理命令中
setCharacterStream(parameterIndex, reader, length)将指定的输入流写入数据库的文本字段
setBinaryStream(parameterIndex, x, length)将二进制的输入流数据写入到二进制字段中

6、CallableStatement接口

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

方法名称功能描述
registerOutParameter(int paramenterIndex, int sqlType)按顺序位置将out参数设置为SQL类型,其中,parameterIndex表示顺序位置,sqlType表示SQL类型
setNull(String parameterName, int sqlType)将指定参数设置为SQL类型的NULL
setString(String parameterName, String x)将指定参数设置为SQl类型的字符串
wasNull()查询最后一个读取的out参数是否为SQL类型的NULL
getInt(int parameterIndex)以Java语言中int值的形式获取指定的数据库中Integer类型参数的值

注意:由于CallableStatement接口继承PreparedStatement,preparedStatement接口又继承于Statement,因此CallableStatement接口中除了拥有自己的方法,同时也拥有了这两个父类接口中的方法

7、ResultSet接口

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

方法名称功能描述
getString(int columnIndex)用于获取指定字段的String类型的值,参数columnIndex代表字段的索引
getString(String columnName)用于获取指定字段的String类型的值,参数columnName代表字段的名称
getInt(int columnIndex)用于获取指定字段的int类型的值,参数columnIndex代表字段的索引
getInt(String columnName)用于获取指定字段的int类型的值,参数columnName代表字段的名称
getDate(int columnIndex)用于获取指定字段的Date类型的值,参数columnIndex代表字段的索引
getDate(String columnName)用于获取指定字段Date类型的值,参数columnName代表字段的名称
next()将游标从当前位置向下移一行
absolute(int row)将游标移动到此ResultSet对象的指定行
afterLast()将游标移动到此ResultSet对象的末尾,即最后一行之后
beforeFirst()将游标移动到此ResultSet对象的开头,即第一行之前
previous()将游标移动到此ResultSet对象的上一行
last()将游标移动到此ResultSet对象的最后一行

代码展示

有两种方法:

第一种:直接赋值

创建一个方法类,用于存放数据库连接,加载驱动和关闭数据库的方法

// 连接数据库
public class JbConnection {

    // 加载jdbc连接mysql驱动
    private final static String drive = "com.mysql.jdbc.Driver";
    // 连接mysql数据的地址
    private final static String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false";
    // 连接mysql的用户名
    private final static String user = "root";
    // 连接mysql的密码
    private final static String pwd = "root";

    // 加载jdbc的驱动
    static {
        try {
            // 加载数据库连接驱动
            Class.forName(drive);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 连接MySQL的连接对象
    public static Connection getConn() {
        try {
            return DriverManager.getConnection(url, user, pwd);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    // 关闭连接
    public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

方法二:使用application.properties配置文件

创建一个配置文件,内容如下:

#加载jdbc连接mysql驱动
drive = "com.mysql.cj.jdbc.Driver"
#连接muysql数据的地址
url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false"
#连接mysql的用户名
user = "root"
#连接mysql的密码
pwd = "root"

Java代码如下:

// 加载jdbc连接mysql驱动
    private static String drive = null;
    // 连接mysql数据的地址
    private static String url = null;
    // 连接mysql的用户名
    private static String user = null;
    // 连接mysql的密码
    private static String pwd = null;





    // 加载jdbc的驱动
    static {
        try {
            FileInputStream in = new FileInputStream("application.properties");
            Properties properties = new Properties();
            properties.load(in);
            drive = properties.getProperty("drive");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            pwd = properties.getProperty("pwd");
            
        } catch (ClassNotFoundException | FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    // 连接MySQL的连接对象
    public static Connection getConn() {
        try {
            // 加载数据库连接驱动
            Class.forName(drive);
            return DriverManager.getConnection(url, user, pwd);
        } catch (SQLException | ClassNotFoundException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
今天也是拼命学习的一天!

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入浅出C语言——排序

文章目录 排序的概念常见的排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序hoare版本挖坑法前后指针版本快速排序的非递归形式 归并排序递归版本非递归版本 计数排序排序算法复杂度及稳定性分析 排序的概念 排序就是使用使一串记录,按照其中的某个或某些关…

vue3 nextTick()应用

在Vue3中,可以使用nextTick函数来延迟执行某些操作,这些操作会在下一次DOM更新周期之后执行。这个函数通常用于在数据更新后,等待DOM更新之后执行一些操作,比如获取DOM元素的尺寸、位置等。 nextTick() 例如,以下一个…

C语言—与坤(机)对弈

目录 设计思路 游戏运行效果 函数的声明 头文件game.h 游戏主体(源文件) 1.game.c 2.test.c 各文件的阐述 各部分的设计心得 1.打印菜单 2.初始化棋盘 3.打印棋盘 棋盘最终效果 1.打印数据 2.打印分割线 如何扩展为10 x 10 棋盘? 4.玩家下棋、电脑下…

mkv文件怎么转换成mp4?来看看这四种转换方式吧!

mkv文件怎么转换成mp4?在很多小伙伴看到,图片就是图片,音频就是音频,视频就是视频,它们展现给人们的效果都差不多。但实际上,不管是图片、视频还是音频文件,其中一个重要的区别在于它们的文件格…

照片尺寸怎么调整大小?三个方法,高效、快捷、安全!

照片尺寸怎么调整大小?照片是我们在日常生活和办公中经常会使用的文件类型之一。在制作各种文件、讲义、PPT、视频等内容时,图片都会成为重要的一部分。不同的图片格式和大小各有特点,有些图片虽然比较大但画质清晰,有些则方便传输…

选择排序,直接插入排序

目录 一、选择排序 1.基本思想 2.直接选择排序的流程 3.实验 二、直接插入排序法 1.基本思想 2.直接插入排序法的流程 3.实验 三、反向排序 1.实验 一、选择排序 与冒泡排序相比,直接选择排序的交换次数更少,所以速度会更快。 1.基本思想…

centos linux 配置私有网段并联网

文章目录 1. 创建虚拟机2. 虚拟机 A 配置网络3. 虚拟机 B 分配静态地址4. 测试 1. 创建虚拟机 vcenter 创建两台虚拟机A 、B,如何创建虚拟机请参考这里 虚拟机 A 具备两个网络接口,外网接口为 ens192 ip:192.168.22.6/20,网关为…

Golang tracing:与 OpenTelemetry、jaeger实现 跨服务 全链路追踪

使用 OpenTelemetry 链路追踪说明 工作中常常会遇到需要查看服务调用关系,比如用户请求了一个接口接口会调用其他grpc,http接口,或者内部的方法这样的调用链路,如果出现了问题,我们需要快速的定位问题,这时候就需要一个工具来帮助我们查看调用链路OpenTelemetry就是这样一个工…

Sui改进提案(SIPs)及其审核流程

SIPs提供了一个清晰透明的流程,使社区可以对Sui网络提出改进建议。 Sui基金会致力于打造一个开放协作的生态,因此推出了Sui改进提案(SIPs,Sui Improvement Proposals),这是一个记录社区为去中心化未来的发…

如何利用API做好电商,接口如何凋用关键字

一.随着互联网的快速发展,电子商务成为了众多企业的首选模式,而开放API则成为了电商业务中不可或缺的部分。API(Application Programming Interface),即应用程序接口,是软件系统不同组件之间交互的约定。电…

登录校验2.0

登录校验2.0 Filter Filter详解 过滤器Filter在使用中的一些细节,主要介绍一下3个方面的细节: 过滤器的执行流程过滤器的拦截路径配置过滤器链 执行流程 过滤器当中我们拦截到了请求之后,如果希望继续访问后面的web资源,就要…

内容编排与Kubernetes

第一节 内容编排与Kubernetes 为什么要用k8s 集群环境容器部署的困境,假设我们有数十台服务器。分别部署Nginx,redis,mysql,业务服务。如何合理的分配这些资源。这里就需要用到容器编排 容器编排 在实际集群环境下&#xff0…

线性结构-队列

队列是一种先进先出First In Fisrt Out,FIFO的线性表。 与一般的数组和链表不同,队列要求所有的数据只能从一端进入,从另一端离开。 输入进入的一端叫队尾rear,数据离开的一端叫队头front。 数据只能从队尾进入队列,从队头离开队…

VSCODE配置ROS编译环境

目录 一、安装插件 二、环境配置 2.1初始化工作空间 2.2配置VSCode 2.2.1创建功能包 2.2.2配置 c_cpp_properties.json 2.2.3配置 task.json 2.2.4配置 CMakeLists.txt 三、运行程序 3.1编译程序 3.2启动ros master 3.3执行可执行文件 用VSCode编辑ROS程序时&#xf…

linux 内核内存管理

物理内存 相关数据结构 page(页) Linux 内核内存管理的实现以 page 数据结构为核心,其他的内存管理设施都基于 page 数据结构,如 VMA 管理、缺页中断、RMAP、页面分配与回收等。page 数据结构定义在 include/linux/mm_types.h …

使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中

作者:SRE运维博客 博客地址:https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/221205544069/ 相关话题:https://www.cnsre.cn/tags/aws/ 躺了好久,诈尸了。因为换了工作,所以比较忙一直没有时间…

解决APP抓包问题「网络安全」

1.前言 在日常渗透过程中我们经常会遇到瓶颈无处下手,这个时候如果攻击者从APP进行突破,往往会有很多惊喜。但是目前市场上的APP都会为防止别人恶意盗取和恶意篡改进行一些保护措施,比如模拟器检测、root检测、APK加固、代码混淆、代码反调试…

挖出api接口的重要性

作为一名软件开发者,API是我们工作中不可或缺的一部分。无论是将不同系统连接起来,还是构建多组件应用程序,API都是我们的核心工具之一。在本文中,我们将深入讨论API的技术细节和实际应用。 一.首先,我们来看看什么是…

怎么把mkv格式改成mp4?不妨试试这几种方法吧!

怎么把mkv格式改成mp4?mp4是一种多媒体封装格式,不过我们通常会将它说成是视频格式,它可以在一个文件中容纳无限数量的视频、音频、图片或字幕轨道,mp4格式也是被我们每个人所熟知,因为我们每个人几乎每天都会接触或者…

Spring入门教程

目录 一、Spring最基本的使用 1.创建Maven项目(不需要模板) 2.添加Spring框架支持 3.添加启动类(没啥可说的符合规范即可) 4.创建bean对象 5.将bean对象注册到Spring中 (a)先在resources文件夹中创建一个xml文件(注意:是test文件用了.xml后缀 不是直接创建一个xml文件) (…