Java JDBC整合(概述,搭建,PreparedStatement和Statement,结果集处理)
一、JDBC的概述:
-
JDBC:是一种执行sql语句的Java APL,可以为多种关系类型数据库提供统一访问,它由一组用Java语言编写的类和接口组成。有了JDBC,Java人员只需要编写一次程序就可以访问不同的数据库。
-
JDBC APL:供程序员调用的接口与类,集成在Java.sql包中
-
DriverManager类:管理不同的JDBC驱动
-
Connection接口:与特定数据库连接
-
Statement接口:执行sql
-
PreparedStatement接口:执行sql
-
二、JDBC的搭建:(有总结例子)
-
注册JDBC驱动程序:
初始化驱动程序,这人样就可以打开与数据库的通信信道
Class.forName("com.mysql.cj.jdbc.Driver");或者
DriverManager.registerDriver(new Driver()); -
建立与数据库的连接:
这需要使用DriverManager.getConnection()方法创造一个Connection对象,他代表一个物理连接的数据库
Connection connection=DriverManager.getConnection(url,user,password);-
URL:
jdbc:mysql://ip(127.0.0.1):端口(3306)/数据库名?serverTimezone=Asia/Sanghai
-
USER:用户名(root)
-
PASSWORD:密码
-
-
获得Stament执行sql语句
Statement st =connection.createStatement();Statement中的方法:
-
【int类型】 excuteUpdate(String sql) 用于执行ddl语句和dml(增删改)语句 返回操作的行数
用于执行ddl语句返回0
用于执行dml语句返回操作的行数
-
【ResultSet类型】 excuteQuery(String sql)用于执行查询语句返回一个ResuSet集合
-
-
获得PrepareStatement执行sql语句
在sql语句中参数位置使用占位符,使用setXX方法向sql中设置参数
PrepareStatement ps = connection.prepareStatement(sql);PrepreStatement中的方法:
-
【int类型】 executeUPdate(): 用于执行ddl语句和dml(增删改)语句,返回操作的行数
用于执行ddl语句返回0
用于执行dml语句返回操作行数
-
【ResultSet类型】executeQuery():用于执行查询语句返回一个ResultSet集合
-
-
关闭与数据库的连接通道
每次操作完成后关闭与数据库交互的通道
-
connection.close();
-
st.close();
-
ps.close();
-
接下来就写一个例子来作为JDBC搭建的总结:
public class day1 {public static void main(String[] args) throws ClassNotFoundException, SQLException {//2.驱动注册//方法一:都是为了创造一个对象//Class.forName("com.mysql.cj.jdbc.Driver");//放射方式加载驱动//方式二:DriverManager.registerDriver(new Driver());
//3.建立与数据库的连接String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";String user="root";String password="root";//这是我的密码qwqConnection connection = DriverManager.getConnection(url,user,password);System.out.println(connection);
//4.发送sqlStatement statement= connection.createStatement();statement.executeUpdate("insert into major(name)value('数学')");
//或者利用PreparedStatement发送/*PreparedStatement preparedStatement = connection.prepareStatement("insert into major(name)value(?)");preparedStatement.setObject(1, "数学");preparedStatement.executeUpdate();*///5.关闭连接statement.close();connection.close();}
}
结果:

三、PreparedStatement和Statement的区别
-
代码的可读性和可维护性
虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次
-
安全性
防止外来代码sql注入。PreparedStatement的预占位符只能插入一个值,而会过滤其他语句;但是Statement可以插入其他语句比如or 1=1之类的和原数据库不符的条件。
举例方便直观感受:
Statement:
Statement statement= connection.createStatement();statement.executeUpdate("insert into major(name)value('数学')");
PrearedStatement:
PreparedStatement preparedStatement = connection.prepareStatement("insert into major(name)value(?)");preparedStatement.setObject(1, "数学");preparedStatement.executeUpdate();
四、结果集处理:(查询学生的姓名,性别等举例)
PreparedStatement和Statement中的executeQuery()方法中会返回一个ResultSe对象,查询结果就封装在此对象中
-
可以使用ResultSet中的next()方法获得下一行数据
-
使用getXXX(String name)方法获得值
举例:
有如下表:
有如下类保存学生数据:
public class Student {int number;String name;String gender;float height;Date regTime;
public void setNumber(int number) {this.number = number;}
public void setName(String name) {this.name = name;}
public void setGender(String gender) {this.gender = gender;}
public void setHeight(float height) {this.height = height;}
public void setRegTime(Date regTime) {this.regTime = regTime;}
}
查询一个学生:
public class day2demo2 {public static void main(String[] args) throws SQLException {//查询学号为1的学生Student student=findStudentByNumber(1);System.out.println(student);}
public static Student findStudentByNumber (int number) throws SQLException {DriverManager.registerDriver(new Driver());String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";String user="root";String password="root";//建立钰数据库的连接Connection connection= DriverManager.getConnection(url, user, password);//执行查询PreparedStatement ps = connection.prepareStatement("select number,name,gender,height,reg_time from student where number=?");ps.setObject(1, number);//执行查询后,mysql将数据分装到一个ResultSet中ResultSet re=ps.executeQuery();//将result中的数据重新包装到自己的对象中,使用起来更加方便Student student =new Student();while(re.next()){student.setNumber(re.getInt("number"));student.setGender(re.getNString("gender"));student.setName(re.getString("name"));student.setHeight(re.getFloat("height"));student.setRegTime(re.getTimestamp("reg_time"));}return student;}
}
结果:(显示地址)想要显示数据还要重写toString方法
查询全部学生:用Student类型的集合包装每个学生
public class day2demo {
/*获取数据库中的信息
*/public static void main(String[] args) throws SQLException {ArrayList<Student> students= findStudentByNumber();System.out.println(students);}
public static ArrayList<Student> findStudentByNumber () throws SQLException {DriverManager.registerDriver(new Driver());String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";String user="root";String password="root";//建立钰数据库的连接Connection connection= DriverManager.getConnection(url, user, password);//执行查询PreparedStatement ps = connection.prepareStatement("select number,name,gender,height,reg_time from student");//执行查询后,mysql将数据分装到一个resultset中ResultSet re=ps.executeQuery();//用arraylist保存student数据ArrayList<Student> students = new ArrayList<>();while(re.next()){Student student =new Student();student.setNumber(re.getInt("number"));student.setGender(re.getNString("gender"));student.setName(re.getString("name"));student.setHeight(re.getFloat("height"));student.setRegTime(re.getTimestamp("reg_time"));students.add(student);}return students;}
}
结果:
相关文章:
Java JDBC整合(概述,搭建,PreparedStatement和Statement,结果集处理)
一、JDBC的概述: JDBC:是一种执行sql语句的Java APL,可以为多种关系类型数据库提供统一访问,它由一组用Java语言编写的类和接口组成。有了JDBC,Java人员只需要编写一次程序就可以访问不同的数据库。 JDBC APL…...
Nginx 负载均衡集群 节点健康检查
前言 正常情况下,nginx 做反向代理负载均衡的话,如果后端节点服务器宕掉的话,nginx 默认是不能把这台服务器踢出 upstream 负载集群的,所以还会有请求转发到后端的这台服务器上面,这样势必造成网站访问故障 注&#x…...
uniapp 多轴图,双轴图,指定哪几个数据在哪个轴上显示
这里使用的在这里导入, 秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 这里我封装成一个组件,自适应的,可以直接复制到自己的项目中 <template><qiun-data-charts type"mix":opts"opts":cha…...
Kotlin 协程 supervisorScope {} 运行崩溃解决
前言 简单介绍supervisorScope函数,它用于创建一个使用了 SupervisorJob 的 coroutineScope, 该作用域的特点:抛出的异常,不会 连锁取消 同级协程和父协程。 看过很多 supervisorScope {} 文档的使用,我照抄一摸一样…...
【Spring 篇】JdbcTemplate:轻松驾驭数据库的魔法工具
欢迎来到数据库的奇妙世界,在这里,我们将一同揭开Spring框架中JdbcTemplate的神秘面纱。JdbcTemplate是Spring提供的一个简化数据库操作的工具,它为我们提供了一种轻松驾驭数据库的魔法。本篇博客将详细解释JdbcTemplate的基本使用࿰…...
Web开发SpringBoot SpringMVC Spring的学习笔记(包含开发常用工具类)
开发框架学习笔记 一.Spring SpringMVC SpringBoot三者的联系SpringMVC工作原理 二.SpringBoot的学习2.1 注解2.1.1 SpringBoot的核心注解2.1.2 配置导入注解(简化Spring配置写XML的痛苦)Configuration和Bean(人为注册Spring 的 Bean)Import(补)ImportResource(补)AutowiredQua…...
微服务下的SpringSecurity认证端
从三板斧开始微服务下的SpringSecurity开始 一、引入组件包 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId> </dependency> 二、创建适配器 AuthorizationServerConfig…...
苹果电脑菜单栏应用管理软件Bartender 4 mac软件特点
Bartender mac是一款可以帮助用户更好地管理和组织菜单栏图标的 macOS 软件。它允许用户隐藏和重新排列菜单栏图标,从而减少混乱和杂乱。 Bartender mac软件特点 菜单栏图标隐藏:Bartender 允许用户隐藏菜单栏图标,只在需要时显示。这样可以…...
笙默考试管理系统-MyExamTest----codemirror(65)
笙默考试管理系统-MyExamTest----codemirror(65) 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest---…...
git在本地创建dev分支并和远程的dev分支关联起来
文章目录 git在本地创建dev分支并和远程的dev分支关联起来1. 使用git命令2. 使用idea2.1 先删除上面建的本地分支dev2.2 通过idea建dev分支并和远程dev分支关联 3. 查看本地分支和远程分支的关系 git在本地创建dev分支并和远程的dev分支关联起来 1. 使用git命令 git checkout…...
【C++】深入了解构造函数之初始化列表
目录 一、再谈构造函数 1、引入 1)构造函数体赋值 2)不同成员变量赋值 2、初始化列表 一、再谈构造函数 1、引入 1)构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值…...
差分--差分数组快速计算L到R值相加后的数组
目录 差分:思路代码: 原题链接 差分: 输入一个长度为 n 的整数序列。 接下来输入 m 个操作,每个操作包含三个整数 l,r,c ,表示将序列中 [l,r] 之间的每个数加上 c 。 请你输出进行完所有操作后的序列。 输入格式 第…...
《NLP入门到精通》栏目导读(01/2)
一、说明 栏目《NLP入门到精通》本着从简到难得台阶式学习过度。将自然语言处理得知识贯穿过来。本栏目得前导栏目是《深度学习》、《pytorch实践》,因此,读者需要一定得深度学习基础,才能过度到此栏目内容。 二、博客建设理念 本博客基地,将建成人工智能领域的参考资料库;…...
three.js实现电子围栏效果(纹理贴图)
three.js实现电子围栏效果(纹理贴图) 实现步骤 围栏的坐标坐标转换为几何体顶点,uv顶点坐标加载贴图,移动 图例 代码 <template><div class"app"><div ref"canvesRef" class"canvas-…...
DHSP和DNS
一、服务程序 1.1DHCP定义 DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组…...
Python冒号的解释
1. “没什么首次没有为第二个,跳了三个”。它得到的切片序列的每一个第三个项目。 扩展片是你想要的。新在Python 2.3 2. Python的序列切片地址可以写成[开始:结束:一步]和任何启动,停止或结束可以被丢弃。a[::3]是每第三个序列。…...
uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端鉴权拦截器实现
锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…...
固乔快递查询助手:批量、快速、全面的快递信息查询软件
在快递行业飞速发展的今天,如何高效、准确地掌握快递信息成为了很多人的需求。而固乔快递查询助手正是解决这一难题的利器。 固乔快递查询助手是一款专注于快递信息查询的软件,支持多家主流快递公司查询。用户只需输入单号,即可快速查询到实时…...
C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化
归并排序 归并算法采用非常经典的分治策略,每次把序列分成n/2的长度,将问题分解成小问题,由复杂变简单。 因为使用了递归算法,不能用于大数据的排序。 核心代码: using System; using System.Text; using System.Co…...
Linux的网络服务DHCP
一.了解DHCP服务 1.1 DHCP定义 DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...
Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)
做RAG自己打算使用esmilvus自己开发一个,安装时好像网上没有比较新的安装方法,然后找了个旧的方法对应试试: 🚀 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana,适配中文搜索…...
