Java的数据库编程:JDBC
Content
🎉1什么是API
🎉2.什么是JDBC
🎉3.数据库驱动包的安装
🎉4.数据库安装包在idea的使用
🎉5.JDBC的增删改查的简单实现
今天为大家带来JAVA的数据库编程,也就是用Java实现数据库
数据库的最基本的操作就是增删改查
在实工作中,手敲sql语句几乎用不到,更多的是用代码来实现sql语句
像常见的数据库,比如mysal,sqlsever,Oracle等数据库软件,在开发的时候会提供编程的接口,叫做API
什么是API呢,也就是实现某种功能,例如Java的接口,就是API,比如Collection接口,里面有很多方法,可以实现很多功能,总的来说API多用于函数的形式来表示
现在要用Java实现数据库,那么也需要提供一个API用来对接Java和数据库,那么就要用JDBC,Java对数据库提出要求,数据库本来的功能上要增加一些来匹配Java,这样才可以让Java操作数据库,执行数据库.
JDBC,全称,Java Database Connectivity,是java和数据库的连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。可以为多种关系数据库提供统一访问.

Java通过JDBC操作数据库,那jdbc和数据库建立连接的时候,需要使用数据库驱动包,就是对不同数据库的原生API进行封装,封装成JDBC认识的API,,Java需要在项目导入数据库驱动包,也才能执行数据库,那么我们就需要下载驱动包,这里我们选择去maven中央仓库下载
上链接
https://mvnrepository.com/


这个要和自己下载的数据库的版本要匹配,因为我下载的是5系列的,所以我要用这个,5开头的都可以选

点击这个
然后下载了,之后,建立一个项目,然后在项目点新建directory,拷贝这个地址,就建立了lib文件

就像这样,这样数据库就和java建立连接了,现在就可以开始在idea编辑数据库代码了
还是和数据库一样,实现增删改查,上代码
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.ConnectionEvent;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** Created with IntelliJ IDEA.* Description:* User: WHY* Date: 2023-03-03* Time: 20:57*/
//JDBC实现sql
public class JDBCInsert {public static void main(String[] args) throws SQLException {//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource) dataSource).setUser("root");//设置用户名((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.构造sql语句String sql="insert into student values(1,'张三')";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力//4.执行sql语句int ret= statement.executeUpdate();System.out.println(ret);//5.释放必要的资源statement.close();connection.close();}
}


看看执行结果,在idea上结果是1的原因是,stament.executeUpdate这个方法返回类型就是int型的,代表修改的行数
执行完以后记得释放资源
现在对这段代码进行优化,发现在构造sql语句的时候比较麻烦,进行优化
String sql="insert into student values(1,'张三')";
这个语句把要输入的内容写死了,也就是硬编码,在现实开发环境中,要为用户考虑,所以要写用户输入
public class JDBCInsert {public static void main(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource) dataSource).setUser("root");//设置用户名((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");int id=scanner.nextInt();//4.构造sql语句String sql="insert into student values("+id+",'"+name+"')";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力//5.执行sql语句int ret= statement.executeUpdate();System.out.println(ret);//6.释放必要的资源statement.close();connection.close();}
但是这种写法容易产生sql注入问题
public static void main(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource) dataSource).setUser("root");//设置用户名((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");int id=scanner.nextInt();//4.构造sql语句String sql="insert into student values(?,?)";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力statement.setInt(1,id);statement.setString(2,name);//5.执行sql语句int ret= statement.executeUpdate();System.out.println(ret);//6.释放必要的资源statement.close();connection.close();}

问号代表占位符,下面的setint里面的1,id代表第一个问号放id,第二个问号放name ,然后根据动态输入就自动放入到sql语句中


这一段就是Preparestatement方法拼接以后 的数据
释放资源:
数据库的客户端和服务器通过网络进行通信,需要占用一定的资源,但客户端很多,服务器很少时,要即及时释放资源
谁先创建,谁就后释放
DataSource内置了数据库连接池,可以复用连接,提高连接服务器的效率
现在写查询操作
public class TestDemo {public static void main(String[] args) throws SQLException {//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource) dataSource).setUser("root");//设置用户名((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.构造sql语句String sql="select* from student";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力//4.执行sql语句ResultSet resultSet= statement.executeQuery();//5遍历结果集合while(resultSet.next()){int id=resultSet.getInt("id");String name=resultSet.getString("name");System.out.println("+id+"+id+"name"+name);}//6.释放必要的资源resultSet.close();statement.close();connection.close();}
resultset这个代表查询的结果集,用到的get方法相当于就是拿到某下标 的元素
删除操作
public static void main(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource) dataSource).setUser("root");//设置用户名((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();/*//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");int id=scanner.nextInt();*///4.构造sql语句String sql="delete from student where id=1";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力/* statement.setInt(1,id);statement.setString(2,name);*/System.out.println(statement);//5.执行sql语句int ret= statement.executeUpdate();System.out.println(ret);//6.释放必要的资源statement.close();connection.close();}
}
修改操作
public static void main1(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource) dataSource).setUser("root");//设置用户名((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();/*//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");*//*int id=scanner.nextInt();*///3.构造sql语句String sql="update student set id=12 where name='张三'";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力System.out.println(statement);//4.执行sql语句int ret= statement.executeUpdate();System.out.println(ret);//5.释放必要的资源statement.close();connection.close();}
这就是今天的所有内容了,我们下期再见!!!
相关文章:
Java的数据库编程:JDBC
Content 🎉1什么是API 🎉2.什么是JDBC 🎉3.数据库驱动包的安装 🎉4.数据库安装包在idea的使用 🎉5.JDBC的增删改查的简单实现 今天为大家带来JAVA的数据库编程,也就是用Java实现数据库 数据库的最基本的操作就是…...
蓝桥冲刺31天之第六天
今天是摆子的一天,明天我要肝一整天的第四题!!! PS:一个普通的排序罢了 import java.io.*; import java.util.Arrays; import java.util.Scanner;/*** ClassName 考勤刷卡* Description TODO* Author 小怂很怂* Date 2…...
Streamlit 工具记录
Streamlit 是基于 Python 的 Web 应用程序框架,可视化数据,分析结果。 Streamlit 是一个开源库,可在短时间内开发机器学习可视化仪表板。只需几行代码就可以构部署强大的数据应用程序。Streamlit 可将仪表板的开发时间从几天缩短至几小时。 …...
GreenPlum小结
什么是GreenPlum?GreenPlum是业界最快最高性价比的关系型分布式数据库,它在开源的PostgreSQL的基础上采用MPP架构(Massive Parallel Processing,海量并行处理),具有强大的大规模数据分析任务处理能力。GreenPlum作为大数据融合存储…...
C语言中数组和指针
文章目录前言一、指针的概念二、指针的大小三、指针的用法1.指针指向变量2.指针指向数组3.指针指向函数总结前言 本文将给大家带来C语言中非常重要的两个知识点,指针和数组。 一、指针的概念 指针,是C语言中的一个重要概念及其特点,也是掌…...
Leetcode.剑指 Offer II 022 链表中环的入口节点
题目链接 Leetcode.剑指 Offer II 022 链表中环的入口节点 mid 题目描述 给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。 为了表示给定链表中的环&#…...
4种不同编程语言的打印方式
意义 打印方式是编程中不可或缺的一部分,它可以帮助开发人员有效地调试和测试代码,并提供有用的信息来监视程序的运行状态和性能。 编程语言中的打印方式是指将程序输出到终端或控制台上进行显示。这个功能在编程中非常重要,因为它可以帮助开…...
websocket介绍
我们聊聊轮询技术,什么是轮询?轮询就是在特定的时间间隔,由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。 轮询分为两种: 短轮询:通过不断的向服务端发送数据,客户端发送Request,服务端直接返回Response(不管服务端数据有没有改变)。长轮…...
Educational Codeforces Round 144 (Rated for Div. 2),C,D
C. Maximum Set 思路: 我们求最大数组,显然是L一直乘2,直到再乘2就越过区间位置。我们说过,再乘一个2就不行,那么我们除一个2,换句话说,就是再乘一个4就不行了。发现,我们可能有机会乘一个3&a…...
【redis学习篇】Redis三种持久化方式详解
官方文档 一、Redis持久性 Redis如何将数据写入磁盘 持久性是指将数据写入持久存储,如固态磁盘(SSD)。Redis提供了一系列持久性选项。其中包括: RDB(快照):RDB持久性以指定的时间间隔执行数据…...
垃圾回收中的分代年龄
为什么CMS里的分代年龄是6而不是15 CMS (Concurrent Mark Sweep) 是一种基于分代的垃圾收集器,其中分代年龄指的是一个对象在年轻代中经历了多少次垃圾收集。在 CMS 中,当一个对象的分代年龄达到阈值时,就会被晋升到老年代中。 在 CMS 中&a…...
蓝桥杯-左移右移(2022国赛)
蓝桥杯-左移右移1、问题描述2、解题思路与代码实现2.1 方法一:使用LinkedList双向链表实现(50%)2.2 方法二:使用HashMap左右临界值实现(100%)1、问题描述 小蓝有一个长度为 N 的数组, 初始时从左到右依次是 1,2,3,…N 。 之后小蓝对这个数组进行了 M 次操…...
你还在手撸SQL?ChatGPT笑晕在厕所
文章目录你还在手撸SQL?ChatGPT笑晕在厕所一、背景二、面向Chat编程1. 数据库设计2. 建表语句3. 加中文注释4. 数据模拟5. 查询成绩6. 修改课程任课老师7. 删除课程8. 删除一个有关联数据的课程总结你还在手撸SQL?ChatGPT笑晕在厕所 一、背景 经典3表设…...
【Redis】Redis慢查询
文章目录慢查询记录慢查询两个配置参数修改配置参数慢查询日志慢查询记录 我们都知道像mysql等持久化数据库会有慢查询日志,其实Redis中也有慢查询日志的功能。慢查询就是系统在执行命令的前后计算每条命令的执行时间,如果超过我们预设的时间,…...
【Kubernetes】第二十一篇 - k8s 项目部署流程和操作梳理
一,前言 上一篇,介绍了 k8s 污点和容忍度; 在了解前面 k8s 介绍之后,设计并完成一个前后端项目的部署和持续集成; 本篇,介绍基于 k8s 项目部署流程设计; 二,项目部署流程设计 本…...
推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术
搜索Query理解和语义召回技术 随着用户规模和产品的发展, 搜索面临着越来越大的 query 长尾化挑战,query 理解是提升搜索召回质量的关键。本次将介绍搜索在 query term weighting,同义词扩展,query 改写,以及语义召回等方向上的实践方法和落地情况。 1.面临问题:长尾 qu…...
【项目精选】基于SSH的医院在线挂号系统(视频+论文+源码)
点击下载源码 医院挂号系统主要用于实现医院的挂号,前台基本功能包括:用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括:系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如…...
Pandas库:从入门到应用(一)
一、Pandas简介 pandas是 Python 的核⼼数据分析⽀持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas是Python进⾏数据分析的必备⾼级⼯具。 pandas的主要数据结构是 **Series(**⼀维数据)与 DataFrame (⼆维数据…...
MySQL中concat()、concat_ws()、group_concat()函数使用
在平时工作中,经常记不清或者记混他们的用法,正好有时间就记录一下~concat()函数语法:concat(str1, str2, int1...)例如执行sql:SELECT CONCAT(id,USERNAME,USER_PHONE) FROM tb_user输出查询结果为: 1test15216756754…...
【JavaEE初阶】第四节.文件操作 和 IO (上篇)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、文件 1.1 文件的概念 1.2 文件的路径二、 Java中文件系统操作 2.1 File类的属性 2.2 File类的构造方法 2.3 File类的方法 …...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
