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的一个服…...
告别答辩夜战!Paperxie AI PPT:10 分钟把论文变「导师满分」学术演示稿
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 又到毕业季,当实验室的灯光熬到凌晨,当电脑里的论文终稿定格在最后一页,无数毕业生却陷入…...
3步掌控数字记忆:WeChatMsg工具让你的聊天记录不再流浪
3步掌控数字记忆:WeChatMsg工具让你的聊天记录不再流浪 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...
Nunchaku FLUX.1-dev 提示词工程入门:编写高质量Prompt的实用技巧与范例
Nunchaku FLUX.1-dev 提示词工程入门:编写高质量Prompt的实用技巧与范例 你是不是也遇到过这种情况:用同一个开源大模型,别人生成的图片精美绝伦,自己生成的却总差点意思,要么主体不对,要么风格跑偏&#…...
TouchGal:一站式Galgame社区解决方案终极指南
TouchGal:一站式Galgame社区解决方案终极指南 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 还在为寻找Galgame资源而四…...
OpenClaw调试技巧:百川2-13B任务失败时的日志分析与修复
OpenClaw调试技巧:百川2-13B任务失败时的日志分析与修复 1. 当自动化任务突然罢工时 上周三凌晨2点,我的OpenClaw突然停止了工作——这个本该在深夜自动整理会议纪要并归档的助手,悄无声息地宕机了。监控屏幕显示它卡在"正在调用百川2…...
MediaPipeUnityPlugin技术解构与实战指南:Unity AI视觉开发进阶之路
MediaPipeUnityPlugin技术解构与实战指南:Unity AI视觉开发进阶之路 【免费下载链接】MediaPipeUnityPlugin Unity plugin to run MediaPipe 项目地址: https://gitcode.com/gh_mirrors/me/MediaPipeUnityPlugin 问题发现:Unity AI视觉开发的现实…...
别再手动切换收发!用SP3485芯片实现RS485自动收发电路的保姆级教程
用SP3485芯片实现RS485自动收发电路的完整设计指南 在工业控制、楼宇自动化等长距离通信场景中,RS485接口因其抗干扰能力强、传输距离远等优势成为首选。然而传统RS485设计需要手动控制收发使能信号,不仅增加软件复杂度,还容易因时序错误导致…...
职场新人必看:用豆包+WPS AI+Canva免费版1小时搞定专业述职PPT(附真实案例)
职场新人1小时速成专业述职PPT:豆包WPS AICanva黄金组合实战指南 刚结束试用期的你,是否正为述职报告焦头烂额?看着同事那些排版精美、数据可视化的PPT,再对比自己Word转PPT的简陋作品,这种落差感我太懂了。三年前我刚…...
DeepFace模型预下载全攻略:从根源解决首次运行痛点
DeepFace模型预下载全攻略:从根源解决首次运行痛点 【免费下载链接】deepface A Lightweight Face Recognition and Facial Attribute Analysis (Age, Gender, Emotion and Race) Library for Python 项目地址: https://gitcode.com/GitHub_Trending/de/deepface …...
告别广告侵扰:AdGuard广告拦截扩展全平台部署指南
告别广告侵扰:AdGuard广告拦截扩展全平台部署指南 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension 副标题:从新手到高手的一站式配置方案 一、价值定…...
