Java的数据库编程-----JDBC
目录
一.JDBC概念&使用条件:
二.mysql-connector驱动包的下载与导入:
三.JDBC编程:
使用JDBC编程的主要五个步骤:
完整流程1(更新update):
完整流程2(查询query):
一.JDBC概念&使用条件:
- JDBC基本概念:
🧐JDBC:即JAVA Database Connectivity,Java数据库连接。是一种用于执行SQL语句的JavaAPI,它是Java中的数据库连接规范。这个API由java.sql.*,javax.sql.*包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
- JDBC使用条件:
1).编程语言,如Java,C、C++、Python等
2).数据库,如Oracle,MySQL,SQL Server等(本文主要演示MySQL数据库)
3).数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提 供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。
- mysql-connector驱动包:
由于每个数据库,本身已经有一套API了,比如MySQL,本身的API,就是C语言的API,这时就需要我们把原生的C的API转换成为兼容JDBC的Java的API。MySQL官方提供了一个mysql-connector-->这个驱动包就可以帮助我们完成上述操作.mysql-connector不是mysql自带的,也不是java自带的,需要通过第三方途径,把这个驱动包下载下来并导入到自己的项目中(第三方库),主要由三个途径进行下载:
- 去Oracle官网进行下载
- 去github
- 去maven中央仓库(这种方法最为简便,下面例子以这个为主)
maven中央仓库网址:Maven Repository: Search/Browse/Explore (mvnrepository.com)
JDBC优势:
- Java语言访问数据库操作完全面向抽象接口编程
- 开发数据库应用不用限定在特定数据库厂商的API
- 程序的可移植性大大增强
二.mysql-connector驱动包的下载与导入:
- 进入上述网址后,直接搜索mysql就行了,你会看到一下两个主要版本:

- 进入后选择适合自己的版本进行下载:

- 接下来我们在已经创建号的项目中,选中项目,右击鼠标新建一个目录,名字随便取,不要包含中文/特殊字符~

- 复制我们刚才下载好的.jar文件,将其粘贴到刚才创建的lib目录中 :

- 右击刚才的lib目录,add as library(意在告诉IDEA,这个lib目录是一个"库"目录):

- 直接点🆗就行了:

- 此时你会看到lib目录下多了以下内容,就说明驱动包导入成功了:
完成上述操作后,我们就可以进行JDBC编程了
三.JDBC编程:
使用JDBC编程的主要五个步骤:
- 1. 创建数据源对象:
DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");//用户名((MysqlDataSource) dataSource).setPassword("2222");//密码
url参数说明:

- 2. 和数据库服务器建立网络连接.:
Connection connection = dataSource.getConnection();
- 3. 构造 SQL 语句:
String sql = "delete from student where id = ?";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1, id);

- 4. 把 SQL 发送到服务器上进行执行:
int n = statement.executeUpdate();System.out.println(n);//返回值就表示, 这个 sql , 影响到 几行
- 5. 释放上述的资源:
statement.close();connection.close();
Statement对象 :
Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象:
主要两种执行SQL的方法:
- executeQuery() 方法执行后返回单个结果集的,通常用于select语句
- executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete 语句
ResultSet对象:
- ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供 了对这些行中数据的访问。
- ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当 前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next() 方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
完整流程1(更新update):
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class TestJDBC1 {public static void main(String[] args) throws SQLException {// 0. 让用户输入 id 和 nameScanner scanner = new Scanner(System.in);System.out.println("请输入id: ");int id = scanner.nextInt();
// System.out.println("请输入name: ");
// String name = scanner.next();// 1. 创建数据源对象DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("2222");// 2. 和数据库服务器建立网络连接.Connection connection = dataSource.getConnection();// System.out.println(connection);// 3. 构造 SQL 语句// PreparedStatement 基于这个类, 构造 SQL// String sql = "insert into student values(" + id + ", '" + name + "')";// String sql = "insert into student values (?, ?)";String sql = "delete from student where id = ?";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1, id);// statement.setString(2, name);// 4. 把 SQL 发送到服务器上进行执行// 返回值就表示, 这个 sql , 影响到 几行int n = statement.executeUpdate();System.out.println(n);// 5. 释放上述的资源statement.close();connection.close();}
}
注意:
完整流程2(查询query):
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestJDBC2 {public static void main(String[] args) throws SQLException {// 1. 创建数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("2222");// 2. 建立连接Connection connection = dataSource.getConnection();// 3. 构建 sqlString sql = "select * from student";PreparedStatement statement = connection.prepareStatement(sql);// 4. 执行 sql, 这一步和前面不一样ResultSet resultSet = statement.executeQuery();// 5. 遍历结果集合while (resultSet.next()) {// 循环里针对一行进行处理,打印列表和mysql中查询的结果一致System.out.println(resultSet.getInt("id"));System.out.println(resultSet.getString("name"));}// 6. 关闭对应的资源resultSet.close();statement.close();connection.close();}
}
结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!

相关文章:
Java的数据库编程-----JDBC
目录 一.JDBC概念&使用条件: 二.mysql-connector驱动包的下载与导入: 三.JDBC编程: 使用JDBC编程的主要五个步骤: 完整流程1(更新update): 完整流程2(查询query): 一.JDB…...
如何获取SSL证书,消除网站不安全警告
获取SSL证书通常涉及以下几个步骤: 选择证书颁发机构(CA): 你需要从受信任的SSL证书颁发机构中选择一个,比如DigiCert、GlobalSign、JoySSL等。部分云服务商如阿里云、腾讯云也提供免费或付费的SSL证书服务。 生成证…...
Unity动画系统介绍
Unity动画系统介绍 Animator组件: 这是Unity中用于控制动画状态的组件,它与Animator Controller一起工作,可以基于游戏逻辑来切换不同的动画状态。 Animator Controller: 这是一个用于管理动画状态机的组件,它允许…...
Three.js-实现加载图片并旋转
1.实现效果 2. 实现步骤 2.1创建场景 const scene new THREE.Scene(); 2.2添加相机 说明: fov(视场角):视场角决定了相机的视野范围,即相机可以看到的角度范围。较大的视场角表示更广阔的视野,但可能…...
ACM实训第25天
第四套 第一道(修改) #include<stdio.h> #include<string.h> int cnt[10]; void count_digits(int n,int* cnt){for(int i1;i<n;i){int numi;while(num){cnt[num%10];num/10;}} } int main(){int t;scanf("%d\n",&t);whi…...
GraphQL(2):使用express和GraphQL编写helloworld
1 安装express、graphql以及express-graphql 在项目的目录下运行一下命令。 npm init -y npm install express graphql express-graphql -S 2 新建helloworld.js 代码如下: const express require(express); const {buildSchema} require(graphql); const grap…...
Vue中的计算属性和侦听器:提升响应式编程的艺术
引言 Vue.js是一个用于构建用户界面的渐进式框架,它的核心特性之一是响应式编程。Vue通过数据绑定和响应式系统,使得开发者能够以声明式的方式处理数据变化。在Vue中,计算属性(Computed Properties)和侦听器ÿ…...
JavaScript倍速播放视频
F12打开开发者工具,打开控制台,输入这行代码,视频即可加速播放, 可以调整倍速(2,4,8,16) document. getElementsByTagName("video")[0]. playbackRate16...
ER图介绍
在数据库设计和建模中,实体-关系图(Entity-Relationship Diagram,简称ER图)是一个至关重要的工具。ER图通过图形化的方式描述了现实世界中的实体(Entity)及其之间的关系(Relationship࿰…...
Oracle通过datax迁移线上表到历史库
历史数据迁移 线上库数据增长迅速,需要定期清理历史数据,因为异地灾备,但是带宽很小,不能使用数据泵直接往历史库导数,会导致本地机房到灾备机房的带宽被占满,调研过flink、golden gate、datax,…...
java基础-深拷贝和浅拷贝
java中有一个概念叫深拷贝和浅拷贝,那这两个是什么意思呢?其实你可以对比一下c中的传值和传引用的问题。 深拷贝 即两个相同的对象地址不同,比如对象A通过拷贝出来对象B,在对B对象进行操作时不会影响到A对象的内容。 浅拷贝 和…...
Java数组操作
数组拓展 1.1 数组拷贝 需求:定义一个方法arraycopy, 从指定源数组中从指定的位置开始复制指定数量的元素到目标数组的指定位置。 1.2. 排序操作 需求:完成对int[] arr new int[]{2,9,6,7,4,1}数组元素的升序排序操作. 1.2.1.冒泡排序 对未排序的各元素…...
C++vector及其实现
第一个参数是类型(可以是自定义也可以是内置类型) 相当于生成一个该类型的数组 allocator是空间配置器 遍历 1.下标遍历 2.迭代器遍历 3.范围for 对象访问 有名对象访问 匿名对象访问 隐式类型转换 成员函数 sort 使用sort需要包含头文件algorithm eg. sort的使用非…...
路由策略实验1
先把地址全部配通 对R1 对R2 对R4 对R3 对R5 对R6 对R7 然后起路由协议 对R1 对R2 对R3 对R4 对R5 对R6 对R7...
含情脉脉的进程
冯诺依曼体系结构 一个计算机在工作的时候是怎样的呢? 我们所认识的计算机都是由一个个的硬件组件组成: 输入设备:键盘、鼠标、摄像头、话筒、磁盘、网卡 中央处理器(CPU):运算器、控制器 输出设备&#x…...
重复文件怎么查找并清理?电脑重复文件清理工具分享:4个
在日常使用电脑的过程中,我们不可避免地会遇到各种重复文件的问题。这些重复文件不仅占据了宝贵的存储空间,还可能导致系统性能下降,甚至引发一些不必要的问题。因此,如何有效地查找并清理这些重复文件成为了许多用户关注的焦点。…...
Java中连接Mongodb进行操作
文章目录 1.引入Java驱动依赖2.快速开始2.1 先在monsh连接建立collection2.2 java中快速开始2.3 Insert a Document2.4 Update a Document2.5 Find a Document2.6 Delete a Document 1.引入Java驱动依赖 注意:启动服务的时候需要加ip绑定 需要引入依赖 <dependen…...
LabVIEW远程开发与调试
在现代项目开发中,远程开发与调试已经成为一种常见的模式,特别是在使用LabVIEW进行工程项目时。本文将详细分析LabVIEW远程开发与调试的优缺点,并从多个角度说明如何建议客户采用这种方式,以提高项目效率和质量。 优点 灵活性和便…...
C/C++|基于回调函数实现异步操作
首先,要搞懂一点,异步操作本质上也是并发,我们想要在线程级别实现异步并发基本就靠三种方式: 多线程并发回调函数协程 今天我们讨论的是回调函数,我们如何通过回调函数来实现异步操作呢? 非阻塞I/O操作回…...
Mac上搭建Python环境:深入探索与高效实践
Mac上搭建Python环境:深入探索与高效实践 在Mac上搭建Python环境,对于开发者来说是一个既具挑战性又充满乐趣的过程。本文将从四个方面、五个方面、六个方面和七个方面详细阐述如何在Mac上成功搭建Python环境,并帮助您更好地理解和应用Pytho…...
QMC解码器终极指南:3步实现加密音乐格式转换的高效解决方案
QMC解码器终极指南:3步实现加密音乐格式转换的高效解决方案 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder QQ音乐下载的加密音频文件格式限制跨平台播放&#…...
Ryzen SDT调试工具:解锁AMD处理器潜能的系统级配置平台
Ryzen SDT调试工具:解锁AMD处理器潜能的系统级配置平台 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...
Phi-4-mini-reasoning部署教程:容器化打包(Dockerfile)+ NVIDIA Container Toolkit
Phi-4-mini-reasoning部署教程:容器化打包(Dockerfile) NVIDIA Container Toolkit 1. 项目概述 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型,专为数学推理、逻辑推导、多步解题等强逻辑任务设计。这款模型主打&quo…...
Apache Flink Agents 0.2.1 发布公告
Apache Flink 社区很高兴地宣布发布 Apache Flink Agents 0.2 系列的首个缺陷修复版本。 此版本包含 3 项缺陷和漏洞修复以及一些对Flink-Agents 0.2的小幅改进。下面列出了所有缺陷修复和改进内容(不包括构建基础设施和构建稳定性方面的改进)。如需查看…...
基于Phi-4-mini-reasoning的智能运维异常检测系统
基于Phi-4-mini-reasoning的智能运维异常检测系统 1. 运维监控的痛点与智能化需求 运维团队每天都要面对海量的日志数据、监控指标和系统告警。传统监控系统往往只能做到简单的阈值告警,当系统出现异常时,运维人员需要手动翻阅成千上万条日志ÿ…...
Word文档自动更新日期技巧
设置Word文档自动显示当天日期打开Word文档后,可以通过插入日期字段实现每次打开时自动更新为当天日期。方法1:使用日期字段在Word文档中定位光标到需要显示日期的位置。点击菜单栏"插入"→"文本"→"日期和时间"。在弹出的…...
Calypso vs PC-DMIS:三坐标两大软件脱机编程实战对比与选型指南
Calypso vs PC-DMIS:三坐标测量软件脱机编程深度对比与实战选型策略 在精密制造领域,三坐标测量机(CMM)的脱机编程能力直接决定了检测效率与资源利用率。作为行业两大标杆,蔡司Calypso与海克斯康PC-DMIS在用户界面设计、编程逻辑、仿真验证等…...
Realtek RTL8821CU无线网卡驱动解决方案 - Linux系统WiFi适配完美指南
Realtek RTL8821CU无线网卡驱动解决方案 - Linux系统WiFi适配完美指南 【免费下载链接】rtl8821CU Realtek RTL8811CU/RTL8821CU USB Wi-Fi adapter driver for Linux 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8821CU 你是否在Linux系统上使用Realtek RTL8821CU…...
别再只数步数了!深入聊聊ADXL345计步算法里的‘动态阈值’与‘最活跃轴’
别再只数步数了!深入聊聊ADXL345计步算法里的‘动态阈值’与‘最活跃轴’ 当你盯着智能手环上的步数统计时,有没有想过这串数字背后藏着怎样的算法智慧?ADXL345作为一款经典的三轴加速度传感器,其计步算法远非简单的阈值比较那么简…...
告别漫长等待:用EDGS(3DGS优化版)快速重建你的3D场景(附Ubuntu 22.04+PyTorch 2.0配置)
极速三维重建实战:EDGS技术解析与Ubuntu高效配置指南 当传统3D高斯喷溅技术(3DGS)还在以小时为单位计算训练时间时,EDGS已经将这一过程压缩到令人惊讶的分钟级。这就像从绿皮火车换乘复兴号高铁的体验升级——不仅速度更快&#x…...
