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的一个服…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...