当前位置: 首页 > news >正文

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ε程序设计语言命令的层次文件识别上载其他类和宏包输入文件检测文件选项的处理…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

SpringTask-03.入门案例

一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中&#xff0…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

【Linux】Linux 系统默认的目录及作用说明

博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...