JDBC概述二(JDBC编程+案例展示)
一(JDBC的编程步骤)
1.加载数据库驱动
加载数据库驱动通常使用class类的静态方法forName()来实现,具体实现方式如下:
Class.forName(“DriverName”),DriverName就是数据库驱动类所对应的字符串。
要加载MySQL数据库的驱动可以采用如下代码:
Class.forName("com.mysql.cj.jdbc.Driver");//MySQL8版本
Class.forName("com.mysql.jdbc.Driver");//MySQL5版本
加载Oracle数据库的驱动可以采用如下代码:
Class.forName("Oracle.jdbc.driver.OracleDriver");
从上面两种加载数据库驱动的代码可以看出,在加载驱动时所加载的并不是真正使用数据库的驱动类,而是数据库驱动类名的字符串。
2.通过DriverManage获取数据库连接。
DriverManage中提供了一个getConnection()方法来获取数据库连接,获取方式如下:
Connection con=DriverManage.getConnection(String url,String user,String pwd);
方法里面的三个参数分别表示连接数据库的url,登录数据库的用户名和密码。其中用户名和密码通常由数据库管理员设置,而连接数据库的url则遵循一定的写法。以MySQL数据库为例,其地址的书写格式如下:
url="jdbc:mysql://hostname:port/databasename";
eg:url="jdbc:mysql://localhost:3306/stu" ;
上面代码中,jdbc:mysql是固定写法,mysql指的是MySQL数据库。hostname表示主机名(如果数据库在本机上,hostname可以为localhost或者127.0.0.1,如果在其他机器上,hostname为所要连接机器的IP地址),port指的是连接数据库的端口号(MySQL端口号默认为3306)databasename指的是MySQL中相应数据库的名称。
3.通过Connection对象获取Statement对象。
Connection创建Statement的方式有以下3种:
(1):createStatement();创建基本的Statenment对象。
(2):prepareStatement(String sql);根据传递的SQL语句创建PrepareStatement对象。
(3): prepareCall(String sql);根据传递的SQL语句创建CallableStatement对象。
以创建基本的Statement对象为例,创建方式如下:
Statement stmt=con.createStatement();
4.使用Statement执行SQL语句。
所有的Statement都有如下三种执行SQL语句的方法。
(1):execute(String sql),用于执行任意的SQL语句。
(2):executeQuery(String sql):用于执行查询。返回一个ResuleSet结果集对象。
(3.executeUpdate(String sql):主要用于执行DML(数据操作语言)和DDL(数据定义语言)语句。执行DML语句(INSERT,UPDATE,DELETE)时会返回受SQL语句影响的行数,执行DDL(CREATE,ALTER)语句返回0。
以execyteQuery()方法为例,其使用方式如下:
ResultSet rs=stmt.executeQuery(sql);
5.操作ResultSet结果集。
如果执行的SQL语句是查询语句,执行结果将会返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。
6.关闭连接,释放资源。
每次操作数据哭结束后都要关闭数据库连接,释放资源,以重复利用资源 。需要注意的是通常资源的关闭顺序与打开顺序相反,关闭资源顺序为:ResultSet,Statement(或PrepareStatement)和Connection。为了保证在异常情况下也能关闭资源。需要在try……catch的finally代码块中统一关闭资源。
二(案例展示)
从数据库中的数据表读取数据,并将结果打印在控制台。
(1):搭建数据库环境。
在MySQL数据库中创建一个名为jdbc的数据库,在该数据库下创建一个名称为tb_user的表,创建数据库和表的SQL语句如下:
create database jdbc;
use jdbc;
create table tb_user(id int primary key auto_increment,NAME varchar(40),sex varchar(2),email varchar(60),birthday DATE);
上述创建tb_user表时添加了id,NAME,sex,email,birthday5个字段,NAME字段名称为大写形式,是因为NAME在MYSQL数据库中属于关键字,为方便区分,所以将NAME字段名称全部用大写表示。
数据库和表创建成功后,再向tb_user表中添加3条数据,插入的SQL语句如下:
insert into tb_user(NAME,sex,email,birthday)
values ('Jack','男','jack@126,com','2000-08-01'),('Tom','男','tom@126.com','1999-01-09'),('Alice','女','alice@126,com','2001-05-06');
查看数据是否添加成功,使用select语句查询tb_user表中的数据,查询结果如下:

(2):创建项目环境,导入数据库驱动。
2.1 在项目中新建一个文件夹Directory,取名为lib,将数据库驱动文件JAR包mysql-connector-java-8.0.18复制在lib文件夹中(驱动下载地址,可进maven仓库)。
2.2 右键File-Project Structure-Libraries-+-Java-项目下lib包中的驱动包-ok-ok-ok-Apply-ok






2.3 编写JDBC程序
package jdbc;import java.sql.*;public class Demo1 {public static void main(String[] args) throws SQLException {Connection con=null;Statement sta=null;ResultSet res=null;try {//1.加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.通过DriverManage获取数据库连接String url="jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true";String user="root";String password="123456";con= DriverManager.getConnection(url,user,password);//3.通过Connection对象来获取Statement对象sta= con.createStatement();//4.使用Statement对象来执行SQL语句String sql="select * from tb_user";res= sta.executeQuery(sql);//5.操作ResultSet结果集System.out.println("id\tname\tsex\teamil\tbirthday");while(res.next()){//通过列名获取指定字段的值int id=res.getInt("id");String name=res.getString("name");String sex=res.getString("sex");String email=res.getString("email");Date birthday=res.getDate("birthday");System.out.println(id+"\t"+name+"\t"+sex+"\t"+email+"\t"+ birthday);}} catch (Exception e) {e.printStackTrace();}finally {//6.关闭连接,释放资源if(res!=null){res.close();}if(sta!=null){sta.close();}if(con!=null){con.close();}}}}

该案例中,首先注册了MySQL数据库驱动,通过DriverManage获取一个Connection对象,然后使用Connection对象创建一个Statement对象,Statement对象通过executeQuery(String sql)方法执行了SQL语句,并返回结果集ResultSet,接下来遍历ResultSet得到查询结果并输出,最后关闭连接,释放数据库资源。
相关文章:
JDBC概述二(JDBC编程+案例展示)
一(JDBC的编程步骤) 1.加载数据库驱动 加载数据库驱动通常使用class类的静态方法forName()来实现,具体实现方式如下: Class.forName(“DriverName”),DriverName就是数…...
广度和深度优先搜索解析与示例代码
一,什么是搜索算法 算法是基于特定数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。 树是图的一种特例(连通无环的图就是树)。 图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。具体方法有很多,两种…...
基于SLIC超像素的归一化分割算法
论文:基于SLIC超像素的归一化分割方法研究 归一化分割的缺点:单独使用时无法区分很接近的图像区域,实时性也差。 区域接近问题:描述图像间相互关系的权重函数的取值,体现图像间的信息特征,影响分割效果。…...
C语言刷题(4)——“C”
各位CSDN的uu们你们好呀,今天小雅兰的内容又到了我们的复习啦,那么还是刷题噢,话不多说,让我们进入C语言的世界吧 BC55 简单计算器 BC56 线段图案 BC57 正方形图案 BC58 直角三角形图案 BC59 翻转直角三角形图案 BC60 带空格…...
带你看懂RuoYi动态数据源切换
文章目录数据源是什么一、spring中是如何处理各种数据源的?1.开搞springboot2.创建一个测试类二、有了如上的理论,那么想想动态切换数据源吧参考若依的动态数据源配置总结数据源是什么 数据源,对于java来说,就是可用的数据库,那么我平时开发的springboot springclo…...
家有女儿必看:盲目的和青春期女儿较劲,不如掌握4个沟通技巧
导读:家有女儿必看:盲目的和青春期女儿较劲,不如掌握4个沟通技巧 各位点开这篇文章的朋友们,想必都是很高的颜值吧,我们真的是很有缘哦,小编每天都会给大家带来不一样的育儿资讯,如果对小编的文…...
【VC 7/8】vCenter Server 基于文件的备份和还原Ⅰ——基于文件的备份和还原的注意事项和限制
目录1.1 协议1.2 还原后配置说明1.3 Storage DRS1.4 分布式电源管理1.5 分布式虚拟交换机1.6 内容库1.7 虚拟机生命周期操作1.8 vSphere High Availability1.9 基于存储策略的管理1.10 其它注意事项虚拟存储区域网络修补关联博文[图片来源]:https://www.vmignite.co…...
【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库
【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库 文章目录【ROS学习笔记10】ROS中配置自定义Cpp头文件和导入自定义Python库一、ROS中的头文件和源文件1.1 自定义头文件调用1.2 自定义源文件调用二、Python模块的导入Reference写在前面,本系列笔记参…...
svn 分支(branch)和标签(tag)管理
版本控制的一大功能是可以隔离变化在某个开发线上,这个开发线就是分支(branch)。分支通常用于开发新功能,而不会影响主干的开发。也就是说分支上的代码的编译错误、bug不会对主干(trunk)产生影响。然后等分…...
@Transactional详解
一、事务的概念 百度百科: 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执 行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL&#x…...
机器学习:Transformer
Transformer sequence-to-sequence(seq2seq) 很大语音没有文本,7000种中超半数没有文字。 遇到的问题: 遇到问题时候可以先不管它,先出一个baseline看看效果,后续再进行提升。 tts: 文本转语音,语音合成…...
pytorch-模型构建,参数访问,模型存取API接口,对比学习
多层感知机的简洁实现pytorch-多层感知机,最简单的深度学习模型,将非线性激活函数引入到模型中。_羞儿的博客-CSDN博客中含单隐藏层的多层感知机的实现方法。首先构造Sequential实例,然后依次添加两个全连接层。其中第一层的输出大小为256&am…...
javaEE 初阶 — 数据链路层中的以太网数据帧
文章目录以太网帧格式1. MAC 地址2. MAC 地址是如何与 IP 地址相互配合的3. 以太网帧格式中的类型MTU(了解)以太网帧格式 数据链路层主要考虑的是相邻的两个结点之间的传输。 这里最知名的协议就是 以太网。 一个以太网数据帧有三个部分组成。帧头载荷…...
泼辣修图Polarr5.11.4 版,让你的创意无限延伸
泼辣修图是一款非常实用的图片处理软件,它不仅拥有丰富的图片处理功能,而且还能够轻松地实现自定义操作。泼辣修图的操作界面非常简洁,功能也非常丰富,使用起来非常方便快捷。 泼辣修图拥有非常丰富的图片处理功能,包括…...
leetcode打卡-深度优先遍历和广度优先遍历
200.岛屿数量 leetcode题目链接:https://leetcode.cn/problems/number-of-islands leetcode AC记录: 思路:深度优先遍历,从0,0开始遍历数组,使用boolean类型数组used记录是否被访问过,进行一…...
【0177】Linux中POSIX信号量实现机制
文章目录 1. 信号量概念1.1 信号量类比1.2 重要的观察1.3 信号量分类2. POSIX与System V信号量3. 信号量API4. 代码演示5. 信号量内核实现1. 信号量概念 在计算机科学中,信号量(semaphores )是一种变量或抽象数据类型,用于控制多个进程对公共资源的访问,并避免并发系统(如…...
跳表--C++实现
目录 作者有话说 为何要学习跳表?为了快,为了更快,为了折磨自己..... 跳表作用场景 1.不少公司自己会设计哈希表,如果解决哈希冲突是不可避免的事情。通常情况下会使用链址,很好理解,当有冲突产生时&#…...
c#:System.Text.Json 的使用一
环境: .net 6.0vs2022 参考: 从 Newtonsoft.Json 迁移到 System.Text.Json System.Text.Json 常规用法 一、写入时的控制 1.1 非ascii码转换 直接看代码: var str System.Text.Json.JsonSerializer.Serialize(new Model { Id 1, Name …...
kaggle数据集下载当中所遇到的问题
kaggle数据集下载当中所遇到的问题报错分析pip install kagglethe SSL module is not available解决方法pip的版本升级解决办法下载kaggle包kaggle数据集下载问题解决参考内容报错分析 今天在尝试使用pip install kaggle的方法去下载我需要的数据集的时候遇到了一些报错的问题…...
TEX:高阶用法
文章目录定制LATEX记数器创建记数器改变记数器的值显示记数器的值长度橡皮长度用户定义命令用户定义的环境标题定制正文中标题设置使用titlesec宏包设置标题格式目录中标题设置LATEX 2ε\varepsilonε程序设计语言命令的层次文件识别上载其他类和宏包输入文件检测文件选项的处理…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
