JDBC知识
JDBC是什么?
这工作中我们针对数据库的操作,实际上很少会用到SQL语句,通过命令行/图形化来操作数据库,更多的是通过主流的编程语言来对数据库进行操作,即使通过代码来操作数据,我们还是会使用到SQL语句,所以掌握SQL语句也是很重要的.
如何通过代码操作数据库?
通过代码操作数据库,前提是,数据库需要提供一组API,供其他程序调用,
什么是API(application programming interface)(非常常见)
在编程中,写代码不是从0开始,会调用别人已经写好的代码,我们称之为"库",这些代码里就提供的一些 类/方法/函数 就可以称为API.
JDBC的由来
数据库这样的软件也会提供API供其他人使用,但是数据库有很多种,比如Oracle,MySQL等等,这些数据库提供的API都不一样,每个数据库都有自己的一套API,对于程序员来说,没切换一个数据库,就要重新学习一套API准则,所以为了有一套标准的数据库API体系,Java自身制定了一套准则,各种数据库都要把自己的API转化成和Java这一套兼容的API,Java针对数据库提供API称之为JDBC
如何把MySQL的API转化成兼容JDBC的API
MySQL官方提供了一个mysql-connector(这个不是mysql自带的,也不是java自带的,需要通过第三方途径,把这个东西下载下并且导入到自己的项目中 )这个东西,就可以完成转换,
mysql-connector,把MySQL的原生api转化成Java的api,通过下载第三方库(Java中后缀通常是jar)的插件,我们也称之jar包
怎么使用JDBC呢
1)下载jar包
2)将jar包导入到自己的项目中
a) 先在项目中创建一个目录,名字随便取,但是不要带有中午/特殊字符,

创建一个Director目录,名字一般取成lib(library)在编程中是库的意思
b)创建好目录以后直接选中jar包,将其直接复制给目录文件中去
c)右键lib目录,add as library (告诉idea 这lib是一个"库"目录)

点击Add as Library 
在点击ok就大功告成了

此时导完包,idea就可以自动识别jar包里都有啥,上述操作就是导入jar的基本操作
如何通过代码来操作JDBC的api呢?
其实有一点小难度,首先需要创建一个数据源对象,因为MySQL是客户端-服务器,

1.创建数据源对象
数据源对象描述了数据从哪里来,数据库服务器所在的位置,我们来看一下DataSource(Java标准库JDBC自带的接口)的源码

它是一个interface接口类型,所以我们要实例化它,就不能通过new来实例化,只能通过new实现他的子类来实例化对象

我们通过new MysqlDataSource()来实例化,使用Mysql就是这个,使用其他的数据库前面就是其他数据库的名字,导入其他的jar包即可
创建好对象之后就需要给对象设置必要的属性
1)数据库服务器在哪 2)访问数据库的账户是啥3)访问数据库的密码是啥
上述的几个操作都是在DataSource的子类中才有,本身是没有这个方法和属性的

第一行代码采用了向上转型()
为了设置属性,下面的三行代码向下转型
理解一下高耦合:一个模块出现问题会对其他模块造成很大的影响
低耦合:一个模块出现问题对其他模块造成很小的影响
内聚:是不是把有关联的东西放在一起,放的越集中,就称之为高内聚,反之内聚越低
低内聚: 写代码的时候,某个功能,可能需要很多代码配合完成,这些代码零散出现在你的工程中,想找到很费劲,(写代码时很不好的习惯)
写代码我们要追求高内聚,低耦合为的是以后方便维护代码
2.和数据库服务器进行网络连接
URL:称为"唯一资源定位符",用来描述网络资源上的位置,数据库也可以理解成网络资源
上述操作都是为数据源对象设置基本属性,接下来就要开始进行数据库服务器的网络链接
![]()
会报错误,我们就需要看是什么错误

受查类异常,我们要么通过throw向上抛出异常,要么通过catch来捕捉异常,
![]()
在main函数后面加入一个这样的语句来解决报错,
dataSource.getConnection(),会返回一个Connection类型的对象,这个对象一定要选择正确Java.sql![]()

此处建立连接不一定会成功,有很多种错误,
可能是有(数据库的ip/端口号/数据库名/相关参数/用户名密码)
数据库连接失败常见的报错
密码错误

数据库名字错误

连接失败(可能是端口出错,也有可能是ip错了,服务器没有正常运行,根据具体情况来分析)
![]()
3.通过程序构造sql语句
通过程序构造sql语句,我们基于PreparedStatement这个类来实现,在编程中翻译为预处理语句,正常来说在cmd敲得sql语句,是把sql发送到mysql服务器MySQL服务器负责解析,解析完成后执行,因为解析工作需要消耗资源,而且MySQL是一个客户端-服务器,同一时刻要给多个客户端提供服务,解析工作积少成多,也会比较消耗资源,我们就可以把解析工作放到客户端来进行解析(自己写的代码),客户端发sql之前把解析工作完成,就可以降低服务器的压力了

通过connection返回的对象
4.把sql上传到服务器进行执行

第一个主要进行的是查询操作,第二个进行的是更新操作(delete,update,create table)
5.进行资源的释放

通过调用close方法进行资源的释放,要与创建的顺序相反
上述在代码中写sql语句就直接把代码写死了,为了让代码更加灵活,我们可以使用Scanner包,进行键盘录入,?一个?就相当于是一个占位符类似于C语言中的%d的操作,可以通过set后面加上替换的类型来进行替换顺序是从1开始的
查询操作使用到一个ResultSet的集合类

相关文章:
JDBC知识
JDBC是什么? 这工作中我们针对数据库的操作,实际上很少会用到SQL语句,通过命令行/图形化来操作数据库,更多的是通过主流的编程语言来对数据库进行操作,即使通过代码来操作数据,我们还是会使用到SQL语句,所以掌握SQL语句也是很重要的. 如何通过代码操作数据库? 通过代码操作…...
C++操纵符用法
C中的操纵符(Manipulators)是用于格式化输入输出的特殊工具。它们可以在输出流中控制各种格式,如设置字段宽度、精度、填充字符等。以下是一些常用的操纵符及其用法: setw(int width): 设置字段宽度为width个字符。 cout <<…...
【一步一步了解Java系列】:子类继承以及代码块的初始化
看到这句话的时候证明:此刻你我都在努力 加油陌生人 个人主页:Gu Gu Study专栏:一步一步了解Java 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者:小闭 …...
探索Expect Python用法:深入解析与实战挑战
探索Expect Python用法:深入解析与实战挑战 在自动化和脚本编写领域,Expect Python已经成为了一种强大的工具组合。它结合了Expect的交互式会话处理能力和Python的编程灵活性,为开发者提供了一种全新的方式来处理复杂的自动化任务。然而&…...
【PostgreSQL17新特性之-explain命令新增选项】
EXPLAIN是一个用于显示语句执行计划的命令,可用于显示以下语句类型之一的执行计划: - SELECT - INSERT - UPDATE - DELETE - VALUES - EXECUTE - DECLARE - CREATE TABLE AS - CREATE MATERIALIZED VIEWPostgreSQL17-beta1版本近日发布了,新…...
JAVA实现人工智能,采用框架SpringAI
文章目录 JAVA实现人工智能,采用框架SpringAISpring AI介绍使用介绍项目前提项目结构第一种方式采用openai1. pom文件: 2. application.yml 配置3.controller 实现层 项目测试 JAVA实现人工智能,采用框架SpringAI Spring AI介绍 Spring AI是AI工程师的一个应用框架…...
基础—SQL—DQL(数据查询语言)分组查询
一、引言 分组查询的关键字是:GROUP BY。 二、DQL—分组查询 1、语法 SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ]; 注意: 1、[ ] 里的内容可以有可以没有。 2、这条SQL语句有两块指定条件的地方&#…...
从CSV到数据库(简易)
需求:客户上传CSV文档,要求CSV文档内容查重/插入/更新相关数据。 框架:jdbcTemplate、commons-io、 DB:oracle 相关依赖: 这里本来打算用的2.11.0,无奈正式项目那边用老版本1.3.1,新版本对类型…...
K210视觉识别模块学习笔记3:内存卡写入拍摄图片_LED三色灯的操作_按键操作_定时器的配置使用
今日开始学习K210视觉识别模块: LED三色灯的操作_按键操作_定时器的配置使用_内存卡写入拍摄图片 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 本文最终目的是编写一个按键拍照的例程序: 为以后的专用场景的模型训练做准备…...
如何定义“智慧校园”这个概念
在信息爆炸的时代,教育面临着前所未有的挑战:如何让每个学生在海量知识中找到属于自己的路径?如何让教师的智慧与科技的力量相得益彰?如何让校园成为培养创新思维的摇篮?智慧校园,这一概念的提出࿰…...
OpenSSL自签名证书
文章目录 生成1. 生成根证书的私钥(root_private_key.pem)2. 创建根证书的CSR和自签名证书(root_csr.pem)3. 生成服务器证书的私钥(server_private_key.pem)4. 创建服务器证书的CSR(server_priv…...
QtCreator调试运行工程报错,无法找到相关库的的解决方案
最新在使用国产化平台做qt应用开发时,总是遇到qtcreator内调试运行 找不到动态库的问题,为什么会出现这种问题呢?明明编译的时候能够正常通过,运行或者调试的时候找不到相关的库呢?先说结论,排除库本身的问…...
【Python系列】Python 元组(Tuple)详解
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
特征融合篇 | YOLOv8 引入动态上采样模块 | 超过了其他上采样器
1. 介绍 本篇介绍了一种将动态上采样模块引入 YOLOv8 目标检测算法的新方法,该方法在 COCO 数据集上获得了 55.7% 的 mAP,超越了其他上采样器。该方法将动态上采样模块引入到 YOLOv8 的特征融合阶段,能够根据输入图像的特征分辨率动态调整上…...
Beyond Compare 3密钥被撤销的解决办法
首先,BCompare3的链接如下 链接:https://pan.baidu.com/s/1vuSxY0cVQCt0-8CpFzUhvg 提取码:8888 --来自百度网盘超级会员V7的分享 1.问题现象 激活之后在使用过程中有时候会出现密钥被撤销的警告,而且该工具无法使用ÿ…...
知识见闻 - 人和动物的主要区别
人类和动物的主要区别之一确实在于理性,但这只是众多区别中的一个方面。以下是一些更全面的比较,突出人类和动物之间的主要区别: 理性和抽象思维: 人类:人类具有高度发展的理性能力,可以进行抽象思维、逻辑…...
Javaweb基础之工程路径
大家好,这里是教授.F 引入: 工程路径有一个知识点需要注意:就是相对路径。所谓相对路径就是依赖当前位置: 相对路径的定位依赖于当前位置或参考位置。 使用相对路径来解决, 一个非常重要的规则:页面所有的…...
国际荐酒师(香港)协会受邀出席广州意大利国庆晚宴
2024年5月30日,意大利驻广州总领事馆举办的2024年意大利国庆招待会及晚宴,庆祝意大利共和国成立。此次晚宴旨在促进中意两国之间的文化交流与合作。国际荐酒师(香港)协会受主办方邀请参与了这一重要活动。 国际荐酒师(…...
让驰骋BPM系统插上AI的翅膀
让驰骋BPM系统插上AI的翅膀 在当今日益复杂多变的商业环境中,业务流程管理(BPM)系统的应用愈发广泛,成为企业提高效率、优化流程、降低成本的重要工具。驰骋BPM系统凭借其出色的性能和丰富的功能,赢得了众多企业的青睐…...
排队论 | 基于排队机制实现智能仓储机器人巡逻及避碰
研究背景: 智能仓储机器人在现代物流行业中扮演着重要的角色,能够提高仓库的运作效率和准确性。然而,仓储机器人在巡逻过程中可能会遇到其他机器人或障碍物,这就需要解决排队和避碰问题,以确保安全和高效的运作。 研究路线: 背景调研:了解智能仓储机器人的发展和应用…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
