JDBC常用的接口

一、什么是JDBC

   JDBC是Java语言连接数据库的接口规范。

 

二、JDBC的体系

  1、Java官方提供一个操作数据库的抽象接口

    抽象接口有很多的接口和抽象类。

   例如:Driver、Connection、Statement。

 

   2、各个数据库厂商提供各自的Java实现类

    需要各自实现具体的细节。

    例如:设计怎么和数据库服务器通信?如何传递SQL语句?如何传递执行结果?

 

三、JDBC官方常用接口

  JDBC的接口所在的包是:  java.sql.*

 

 (一)加载驱动实现类

        主要目的是指定程序当前要和哪一种数据库通信。

 

   1、基础知识

   驱动类的抽象类是:

java.sql.Driver。

   MySQL厂商的实现类是:

com.mysql.jdbc.Driver

 

  2、把含有实现类的jar包放入类路径

       需要从那些数据库厂商的官网下载jar文件,放入项目的类路径下。

        驱动jar文件名字类似"mysql-connection-java-xxx.jar"。

 

   3、加载驱动实现类的方法

   第一种:

    调用java.sql.DriverManager类的下列方法

public static void  registerDriver(Driver 驱动对象)

(以MySQL为案例):

// 构建驱动实现类的对象

Driver  temp = new com.mysql.jdbc.Driver();

 

// 注册到驱动管理器中

DriverManager.registerDriver(temp);

 

 第二种:

  用类对象的反射加载。

  调用Class类的下列静态方法:

public static Class forName("类的包名.类名")

(以MySQL为案例):

// 加载驱动类

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

 

 (二)获得连接对象

   Java程序和数据库通信,需要一个连接对象。

   连接对象的类:

java.sql.Connection

  如何获得连接对象:

  1、准备三个信息:

   连接的URL地址:描述数据库在哪台计算机上。

   数据库账号名:代表用哪个账号连接。

   账号的密码:用密码来验证当前程序是不是拥有账号的所有权。

 

 2、调用DriverManager类的下列方法

public static Connection getConnection(

   String 地址, 

   String 账号, 

   String  密码

)

  MySQL的案例:

  假设数据库路径是 "jdbc:mysql://127.0.0.1:6666",用户名是"root",密码是"123"。

Connection con = DriverManager.getConnection(

      "jdbc:mysql://127.0.0.1:6666",

      "root",

      "123");

 说明:

    数据库的连接路径规则是

jdbc:数据库类型名字:数据库IP地址或者域名:端口[/默认数据库]

   MySQL数据库的类型是"mysql"。

   后面可以不接默认数据库。

   案例:

// 假设在IP地址是192.168.4.121的计算机上,有一个监听在3306端口的MySQL服务器,它的连接路径如下:

 

jdbc:mysql://192.168.4.121:3306

 

 连接对象的其他方法:

// 设置是否开启自动事务提交

void setAutoCommit(boolean 值)

 

// 设置保存点

Savepoint setSavePoint()

 

// 手动提交事务

void commit()

 

// 回滚事务

void rollback()

 

// 回滚到指定的保存点

void rollback(Savepoint 保存点)

 

  (三)创建语句对象

   语句对象是为了执行具体的SQL语句。

   1、语句类的路径:

java.sql.Statement

  2、如何获得语句对象:

  调用Connection类型的对象的下列方法:

public Statement createStatement()

案例:

Statement state = con.createStatement();

 

  3、主要的方法

   1)用于执行一般的SQL语句:

// 执行SQL语句

boolean  execute(String  SQL语句)

   返回值:

       true  :  结果是ResultSet结果集对象。

       false :  结果是更新的行数,或者没有结果。

 

    相关方法:

// 如果execute执行返回true,需要下列方法获取结果集:

ResultSet  getResultSet()

 

// 如果execute执行返回false,需要下列方法获取更新的记录行数:

int  getUpdateCount()

 

  2)用于专门的查询

       返回一个ResultSet结果集对象,适合select语句。

  方法如下:

ResultSet  executeQuery(String SQL语句)

  案例:

// 查询user数据表的所有记录

ResultSet  rs =  state.executeQuery("select  *  from user");

 

 3)专门的更新操作

     返回本次更新的记录行数,适合insert、update、delete三种语句。

     方法如下:

int  executeUpdate(String SQL语句)

  案例:

// 删除user数据表的id为255的记录

int count =  state.executeUpdate("delete    from user where id = '255' ");

 

// 打印删除的记录行数

System.out.println("本次执行删除记录个数:"  + count);

 

 (四)处理结果集

       结果集是把查询的记录放到一个列表集合里,从上到下依次获取。

   结果集类:

java.sql.ResultSet

   主要方法:

   1、跳转行记录

  行号从1开始编号。

// 跳转到指定的行,成功返回true

boolean  absolute(int  行号)

 

// 跳转到第一行,成功返回true

boolean first()

 

// 跳转到最后一行,成功返回true

boolean last()

 

// 跳转到前一行,成功返回true

boolean previous()

 

// 跳转到下一行,成功返回true

boolean next()

 

 2、获得一行的字段值

       JDBC为每种类型都提供了对应的get方法,方便匹配字段值的类型。

   例如: getInt() getFloat() getDouble() getLong() getSring() getTime() getDate()。

 

  第一种:用字段名获取

   以获取String类型为例:

String  getString(String  字段名)

  获取字段名是id的值:

String value = rs.getString("id");

 

 第二种:用字段值所在的列号获取

  列是从1开始编号。

  1代表第一列,2代表第二列。

 以获取String类型为例:

String  getString(int 列号)

 获取第2列的值:

String value = rs.getString(2);

 

3、实际的处理逻辑

// 获取结果集对象

ResultSet rs = state.executeUpdate("SQL语句");

 

// 循环处理,有下一行就继续循环

while(rs.next()){

    // 用get方法获得当前行的字段

}

 

// 关闭结果集

rs.close();

 

四、注意事项

  1、连接用完后及时调用close()方法关闭。

  2、结果集获取字段值的方法要和返回的类型匹配。

  3、账号权限设计合理,不能获取最高权限。

 

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

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

相关文章

容器适配器-stack栈

C标准库不只是包含了顺序容器,还包含一些为满足特殊需求而设计的容器,它们提供简单的接口。 这些容器可被归类为容器适配器(container adapter),它们是改造别的标准顺序容器,使之满足特殊需求的新容器。 适配器:也称配置器,把一…

[250403] HuggingFace 新增检查模型与电脑兼容性的功能 | Firefox 发布137.0 支持标签组

目录 Hugging Face 让寻找兼容的 AI 模型变得更容易Firefox 137 版本更新摘要 Hugging Face 让寻找兼容的 AI 模型变得更容易 Hugging Face 是一个流行的在线平台,用于访问开源人工智能 (AI) 工具和模型。该平台推出了一项有用的新功能,允许个人轻松检查…

.NET 创建MCP使用大模型对话二:调用远程MCP服务

在上一篇文章.NET 创建MCP使用大模型对话-CSDN博客中,我们简述了如何使用mcp client使用StdIo模式调用本地mcp server。本次实例将会展示如何使用mcp client模式调用远程mcp server。 一:创建mcp server 我们创建一个天气服务。 新建WebApi项目&#x…

Redis 中 Set(例如标签) 和 ZSet(例如排行榜) 的详细对比,涵盖定义、特性、命令、适用场景及总结表格

以下是 Redis 中 Set 和 ZSet 的详细对比,涵盖定义、特性、命令、适用场景及总结表格: 1. 核心定义 数据类型SetZSet(Sorted Set)定义无序的、唯一的字符串集合,元素不重复。有序的、唯一的字符串集合,每个…

解决Spring参数解析异常:Name for argument of type XXX not specified

前言 在开发 Spring Boot 应用时,我们常遇到类似 java.lang.IllegalArgumentException: Name for argument not specified 的报错。这类问题通常与方法参数名称的解析机制相关,尤其在使用 RequestParam、PathVariable 等注解时更为常见。 一、问题现象与…

刚刚,OpenAI开源PaperBench,重塑顶级AI Agent评测

今天凌晨1点,OpenAI开源了一个全新的AI Agent评测基准——PaperBench。 这个基准主要考核智能体的搜索、整合、执行等能力,需要对2024年国际机器学习大会上顶尖论文的复现,包括对论文内容的理解、代码编写以及实验执行等方面的能力。 根据O…

Golang封装Consul 服务发现库

以下是一个经过生产验证的 Consul 服务发现封装库,支持注册/注销、健康检查、智能发现等核心功能,可直接集成到项目中: package consulimport ("context""fmt""log""math/rand""net""os""sync"&quo…

自适应信号处理任务(过滤,预测,重建,分类)

自适应滤波 # signals creation: u, v, d N = 5000 n = 10 u = np.sin(np.arange(0, N/10., N/50000

PyTorch深度学习框架 的基础知识

目录 1.pyTorch检查是否安装成功 2.PyTorch的张量tensor 基础创建方式(三种) 2.2用列表创建tensor 2.2使用元组创建 tensor 2.3使用ndarray创建创建 tensor 2.4 快速创建tensor的常用方法 3.pyTorch中的张量tensor的常用属性 4. tensor中的基础数据…

MySQL学习集--DDL

DDL 数据库操作 查询所有数据库 SHOW DATABASES;查询当前数据库 SELECT DATABASE();创建 CREATE DATABASE[IF NOT EXISTS]数据库名[DEFAULT CHARSET 字符集][COLLATE 排序规则];删除 DROR DATABASE[IF EXISTS]数据库名;使用 USE 数据库名;表操作 创建表格 CREATE TABL…

Vue 3 中按照某个字段将数组分成多个数组

方法一:使用 reduce 方法 const originalArray [{ id: 1, category: A, name: Item 1 },{ id: 2, category: B, name: Item 2 },{ id: 3, category: A, name: Item 3 },{ id: 4, category: C, name: Item 4 },{ id: 5, category: B, name: Item 5 }, ];const grou…

LeetCode刷题 -- 48. 旋转图像

题目 算法题解:顺时针旋转矩阵(90度) 1. 算法描述 给定一个 n n 的二维矩阵,请将矩阵顺时针旋转 90 度。 例如: 输入: [[1,2,3],[4,5,6],[7,8,9] ]输出: [[7,4,1],[8,5,2],[9,6,3] ]2. 思…

Vulkan进阶系列1 - Vulkan应用程序结构(完整代码)

一: 概述 在前面的20多篇文章中,我们了解了Vulkan的基础知识,和相关API的使用,接下来我们要从零开始写一套完整Vulkan应用程序,在这个过程中加深对Vulkan中的各种概念的理解。 Vulkan 应用程序一般遵循 初始化 -> 运行循环 -> 资源清理 的结构,本实例也基本遵循了…

VTK的两种显示刷新方式

在类中先声明vtk的显示对象 vtkRenderer out_render; vtkVertexGlyphFilter glyphFilter; vtkPolyDataMapper mapper; // 新建制图器 vtkActor actor; // 新建角色 然后在init中先初始化一下: out_rend…

【CSS3】04-标准流 + 浮动 + flex布局

本文介绍浮动与flex布局。 目录 1. 标准流 2. 浮动 2.1 基本使用 特点 脱标 2.2 清除浮动 2.2.1 额外标签法 2.2.2 单伪元素法 2.2.3 双伪元素法(推荐) 2.2.4 overflow(最简单) 3. flex布局 3.1 组成 3.2 主轴与侧轴对齐方式 3.2.1 主轴 3.2.2 侧轴 3.3 修改主…

详细介绍一下C++的按位运算

在C中,按位运算(Bitwise Operations) 是直接对二进制位(bit)进行操作的低级运算,常用于处理硬件、优化性能、加密算法或底层资源管理。以下是按位运算符的详细说明、示例和典型应用场景: 1.按位…

Flask与 FastAPI 对比:哪个更适合你的 Web 开发?

在开发 Web 应用时,Python 中有许多流行的 Web 框架可以选择,其中 Flask 和 FastAPI 是两款广受欢迎的框架。它们各有特色,适用于不同的应用场景。本文将从多个角度对比这两个框架,帮助你更好地选择适合的框架来构建你的 Web 应用…

Python爬虫第一战(爬取优美图库网页图片)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 爬取网页图片 前言前言 今天学习的主要是关于如何利用Python爬取网页图片知识的理解和应用 # 1.获取网页信息,交给beautifulsoup # 2.获取页面里…

J1 ResNet-50算法实战与解析

🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同学啊 | 接輔導、項目定制 一、理论知识储备 1. 残差网络的由来 ResNet主要解决了CNN在深度加深时的退化问题(梯度消失与梯度爆炸)。 虽然B…