CUMT--Java复习--JDBC编程

目录

一、JDBC简介

二、数据库访问 

1、加载数据库驱动

2、建立数据连接

3、创建Statement对象

4、执行SQL语句

5、访问结果集 

三、MetaData接口

1、DatabaseMetaData接口

2、ResultSetMetaData接口

四、事务

1、JDBC中的事务

2、保存点

3、批量更新


 

一、JDBC简介

(1)概述

        JDBC是一种执行SQL语句的Java API,可以通过JDBC连接到关系数据库,并通过SQL结构化查询语言完成对数据库的增删改查操作。

        JDBC访问数据库时需要完成三件工作:建立与数据库的连接、执行SQL语句、获取执行结果。

(2)JDBC驱动

        数据库驱动程序是JDBC程序和数据库之间的转换层

        数据库驱动程序负责将JDBC调用映射成特定的数据库调用

(3)JDBC API

        JDBC API提供了一组用于与数据库进行通信的接口和类,定义在java.sql中

名称描述
DriverManager用于管理JDBC驱动的服务类,负责加载和卸载各种驱动程序,建立数据库的连接并获取连接对象
Connection用于数据库连接,每一个Connection对象代表一个数据库连接会话
Statement用于执行SQL语句的工具接口,当执行查询语句时返回一个查询到的结果集
PreparedStatement用于执行预编译的SQL语句
CallableStatement用于调用SQL存储过程
ResultSet表示结果集,包含访问查询结果的各种方法

        在JDBC编程中,易引发SQLException异常,需要进行异常处理,所以SQLException也是JDBC编程中其他异常类型的基础。

        在JDBC中执行SQL查询语句方式有一般查询(Statement)、参数查询(PreparedStatement)、存储过程(CallableStatement)三种。

3d646fb9b55f4465bf9b270b831c724b.png


二、数据库访问 

使用JDBC访问数据库的步骤:

        加载数据库驱动->建立数据连接->创建Statement对象->执行SQL语句->访问结果集

1、加载数据库驱动

        使用Class类的forName() 方法来加载数据库驱动

Class.forName("com.mysql.jdbc.Driver")             //加载mysql驱动
Class.forName("oracle.jdbc.driver.OracleDriver")   //或加载Oracle驱动

2、建立数据连接

        使用DriverManager.getconnection(String url,String user,String pass)方法建立数据库连接。

Class.forName("oracle.jdbc.driver.OracleDriver")
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:8001:orcl"     //URL链接字符串"root"                                      //用户名"admin"                                     //密码
)

3、创建Statement对象

        通过Connection对象获得Statement的方法有:

createStatement()创建一个基本的Statement对象
prepareStatement(String sql)根据参数化的SQL语句创建一个预编译的PreparedStatement对象
prepareCall(String sql)根据SQL语句来创建一个CallableStatement对象

        创建Statement实例:

Statement smt = conn.createStatement(); 

4、执行SQL语句

        执行SQL语句返回一个结果集ResultSet。

        执行SQL语句三种方法:

executeQuery()只能执行查询语句
executeUpdate()和executeLargeUpdate()用于执行DML(插入、增加、删除)和DDL(创建表、删除表)语句
execute()可以执行任何SQL语句

         执行SQL语句的实例:

ResultSet rs = smt.executeQuery("SELECT sno,name,age FROM student");

5、访问结果集 

        由于SQL的查询结果使用ResultSet进行封装,所以使用getXXX("列名"或列索引)方法访问结果集中的数据时,可通过列索引或列名来获取游标所指行中的列数据,XXX代表的是获取的数据类型。

        循环输出结果集中的数据:

While(rs.next()){System.out.println(rs.getString(1))           //循环输出第一列数据
}While(rs.next()){System.out.println(rs.getString("username"))  //循环输出username列数据
}

        当数据库操作执行完毕或退出应用前,应该执行关闭操作,关闭顺序为:

(1)关闭结果集:rs.close()

(2)关闭Statement对象:stmt.close()

(3)关闭连接:conn.close()

三、MetaData接口

1、DatabaseMetaData接口

        DatabaseMetaData接口用于获取数据库的相关信息,通过Connection接口的getMetaData()方法进行获取。

        DatabaseMetaData的常用方法如下:

d5a31d691396495187dd313ce860779c.png

        实例:

DBUtil db = new DBUtil();                  //通过工具类获取数据库连接
Connection conn=db.getConnection();        //建立数据连接
DatabaseMetaData dmd = conn.getMetaData();
System.out.println("数据库产品名:"+dmd.getDatabaseProductName());      //输出数据库产品名
System.out.println("数据库版本号:"+dmd.getDatabaseProductVersion());   //版本号
System.out.println("驱动类型名:"+dmd.getDriverName());                 //驱动类型名
db.closeAll();                             //关闭连接

2、ResultSetMetaData接口

        ResultSetMetaData接口用来获取结果集的结构,如结果集的列数和列名。

        ResultSetMetaData的常用方法如下:

022cc584750b4c4eb5644c1058074107.png

ca04e7a894e141bc8605c5b798e71805.png

        实例:

DBUtil db=new DBUtil();
db.getConnection();
ResultSet rs=db.executeQuery(selectSql,null);   //结果集初始化,并执行选择sql
ResultSetMetaData rsmd=rs.getMetaData();        //接口初始化
System.out.println("总共有:"+rsmd.getColumnCount()+"列");  //返回结果集列数
db.closeAll();

四、事务

1、JDBC中的事务

        事务:由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。

        事务四个特性:原子性、一致性、隔离性、持久性。

        在JDBC中对事物操作提供了支持,由Connection提供,在默认情况下进行自动提交,可以使用Connection对象中的setAutoCommit()方法开启或者关闭自动提交模式。

conn.setAutoCommit(false);    //关闭自动提交

        当所有SQL语句都执行成功后,调用Connection的commit()方法来提交事务。

conn.commit();

        任意一条SQL语句执行失败,调用Connection的rollback()方法来回滚事务

conn.rollback();

         当遇到未处理的SQLException异常时,事务也会自动回滚,若捕获该异常,则显式调用rollback()进行回滚。

2、保存点

        设置保存点:

Savepoint=conn.setSavepoint();

         回滚保存点:

conn.rollback(Savepoint);

3、批量更新

        批量更新:多条SQL语句被作为一批操作同时收集、提交,通过DatabaseMetaData的supports()查看底层数据库是否支持批量更新。

Statement stat=conn.createStatement();    //创建Statement对象
stat.addBatch("INSERT INTO stu(name,id,sex,age) VALUES("张三","001","男",20)");    //收集多条SQL语句
stat.addBatch("INSERT INTO stu(name,id,sex,age) VALUES("李四","002","男",21)");
stat.executeBatch();                      //同时执行多条SQL语句

参考书籍:《Java 8 基础应用与开发》QST青软实训编

 

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

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

相关文章

【LeetCode】459. 重复的子字符串(KMP2.0)

今日学习的文章链接和视频链接 leetcode题目地址:459. 重复的子字符串 代码随想录题解地址:代码随想录 题目简介 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 看到题目的第一想法(可以贴代码) 1.…

韵达快递查询入口,一键将退回件筛选出来

批量查询韵达快递单号的物流信息,并将退回件一键筛选出来。 所需工具: 一个【快递批量查询高手】软件 韵达快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主界面左上角的…

CSS-SVG-环形进度条

线上代码地址 <div class"circular-progress-bar"><svg><circle class"circle-bg" /><circle class"circle-progress" style"stroke-dasharray: calc(2 * 3.1415 * var(--r) * (var(--percent) / 100)), 1000" …

影响晶振频率稳定性的因素及解决方法

晶振作为电子设备中的核心元件&#xff0c;其频率稳定性对设备的性能和可靠性具有重要影响。晶发电子将介绍影响晶振频率稳定性的因素&#xff0c;并探讨相应的解决方法。 一、影响晶振频率稳定性的因素 频率&#xff1a;晶振的频率是影响其性能的最重要因素之一。在选择晶振…

初识Docker-什么是docker

Docker是一个快速交付应用、运行应用的技术 目录 一、Docker 二、运用场景 一、什么是Docker&#xff1f;它的作用是什么&#xff1f; Docker如何解决大型项目依赖关系复杂&#xff0c;不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包&…

基于SSM的勤工助学系统的设计与实现论文

勤工助学系统设计 摘要 随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了勤工助学系统的开发全过程。通过分析企业对于勤工助学系统的需求&#xff0c;创建了一个计算机管理勤工助学系统的方案。文章介绍了勤工助学系…

SpringBoot访问外部接口的常见方式

文章目录 SpringBoot访问外部接口模拟服务接口RestTemplatepom.xmlRestTemplateConfigClientTestRestTemplateController.java结果 WebClientpom.xmlClientTestWebClientController.java结果 HttpClientpom.xmlClientTestHttpClientController.java结果 OkHttppom.xmlClientTes…

LeetCode Hot100 295.数据流的中位数

题目&#xff1a; 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFinder() 初始…

linux sed命令操作大全

经常使用&#xff0c;但有些总记不全&#xff0c;有时候经常查找&#xff0c;这次全部捋清楚做备忘&#xff0c;有需要的小伙伴欢迎收藏起来哦&#xff01; 查、增、改、删一应俱全&#xff0c;非常详细&#xff01; 目录 一、查看 查看第2行 查看第2行到第3行 查看第1行、…

移动SEO:如何针对任何设备优化您的网站

您快速进行 Google 搜索并阅读一堆结果。然后&#xff0c;您会发现一些网站具有您正在寻找的答案。 但是你从SERP中选择的第一个&#xff0c;也是最有前途的网站&#xff0c;在你最喜欢的移动设备上无法正常工作。 所以&#xff0c;你关闭它&#xff0c;看看下一个网站是否有…

【Linux驱动】pinctrl 和 gpio子系统(一)—— pinctrl 节点解析,引入gpio子系统

裸机开发时&#xff0c;如果要点亮一个 LED&#xff0c;我们要做如下内容&#xff1a; 初始化时钟设置引脚复用为哪个功能&#xff0c;配置引脚的电气属性设置引脚的 IO 方向、初始值 有了设备树以后&#xff0c;我们可以通过 pinctrl 和 gpio 子系统来配置上述内容。 pinct…

基于深度学习的森林火焰烟雾检测系统(含UI界面,yolov8、Python代码,数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

听GPT 讲Rust源代码--src/tools(18)

File: rust/src/tools/rust-analyzer/crates/ide-ssr/src/from_comment.rs 在Rust源代码中的from_comment.rs文件位于Rust分析器&#xff08;rust-analyzer&#xff09;工具的ide-ssr库中&#xff0c;它的作用是将注释转换为Rust代码。 具体来说&#xff0c;该文件实现了从注…

Django(二)

1.django框架 1.1 安装 pip install django3.21.2 命令行 创建项目 cd 指定目录 django-admin startproject 项目名mysite ├── manage.py [项目的管理工具] └── mysite├── __init__.py├── settings.py 【配置文件&#xff0c;只有一部分…

基于SpringBoot的考研专业课程管理系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

Docker命令集

一、常用命令: run run 从映像创建并运行新容器 $ docker run -it -v $(pwd):/home/zhangsan --name ohos ubuntu:20.04说明&#xff1a;命令表示创建一个名为ohos&#xff0c;系统镜像为ubuntu 20.04的容器&#xff1b;这个容器运行在交互模式下&#xff0c;并且将当前目录…

Mybatis Flex 常见用法

文章目录 Mybatis Flex 常见用法一、枚举二、自动填充2.1 方式一&#xff1a;Table 配置2.2 方式二&#xff1a;Column 配置 三、分页3.1 分页统一接口3.2 实现分页接口3.3 使用 四、关联查询4.1 RelationOneToOne&#xff1a;一对一4.1.1 单向关联4.1.2 双向关联 4.2 Relation…

在laravel 项目中 composer.json 中 autoload 配置是什么作用

在 Laravel 项目中&#xff0c;composer.json 文件是一个重要的文件&#xff0c;它用于定义项目依赖以及一些 Composer 的配置。其中 autoload 是一个键&#xff08;key&#xff09;&#xff0c;其下定义了如何自动加载 PHP 类库。 autoload 的作用是告诉 Composer 和 PHP 解释…

【krita】实时绘画 入门到精通 海报+电商+装修+修复手部

安装插件 首先打开comfyUI&#xff0c;再打开krita&#xff0c;出现问题提示&#xff0c; 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git krita基础设置 设置模型 设置lora &#xff08;可设置lora强度 增加更多…

华纳云:怎么用python实现进程,线程和协程

在Python中&#xff0c;可以使用multiprocessing模块来创建进程&#xff0c;使用threading模块来创建线程&#xff0c;以及使用asyncio模块来创建协程。以下是简单的示例代码演示如何使用Python实现进程、线程和协程&#xff1a; 进程&#xff08;multiprocessing&#xff09;…