jdbc(mysql)
1.概述
jdbc:java database connection(java与数据库连接)
java可以连接不同数据库,不同数据库连接细节不同,具体细节都由数据库自己实现
由java设计出一系列连接数据库的接口规范,然后由不同的数据库开发商去实现。jdbc实现了java与数据库之间的数据交互。
2.jdbc连接步骤
1.创建一个java项目,创建一个lib包和idea包同级,接着把需要连接的数据库jar包复制到lib内。
2.右键jar文件,点击add as library,这一步完成后就可以看见jar文件可以打开了,这一步才是真正意义上的加入可以使用这个jar文件,完成这一步后才可以点开jar包。
3.加载驱动
//反射机制加载 两个留一个Class.forName("com.mysql.cj.jdbc.Driver");//DriverManager.registerDriver(new Driver());//建立与数据库的连接,获得连接对象String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";//serverTimezone=Asia/Shanghai是数据8才加上的,以前版本的可以不用写String user = "root";String password = "123456";//Connection connection = DriverManager.getConnection(url, user, password);Connection connection = DriverManager.getConnection(url, user, password);//发送sqlStatement statement = connection.createStatement();statement.executeUpdate("insert into course(name) values('操作系统')");//关闭连接statement.close();connection.close();
3.jdbc连接两种方式
1。创建statement对象
创建statement对象,此类方式对于sql语句主要是将sql语句与数据拼接发送到数据库进行实现
public void add(String NAME,String gender,String birthday,String phonenum,String adress,double height,int majorid) throws ClassNotFoundException, SQLException {//加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//建立连接String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";String user="root";String password="123456";Connection connection = DriverManager.getConnection(url,user ,password );//发送sqlStatement statement = connection.createStatement();statement.executeUpdate("INSERT INTO student(NAME,gender,birthday,phonenum,adress,height,majorid)" +"VALUES('"+NAME+"','"+gender+"','"+birthday+"','"+phonenum+"','"+adress+"',"+height+","+majorid+")");//关闭连接statement.close();connection.close();}
2. 创建preparedStatement对象
创建preparedStatement对象,此类方法运用?占位符,通过preparedStatement的setobject方法依次对占位符?进行赋值,有较高的安全性。
public void add(String NAME,String gender,String birthday,String phonenum,String adress,double height,int majorid) throws ClassNotFoundException, SQLException {//加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//建立连接String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";String user="root";String password="123456";Connection connection = DriverManager.getConnection(url,user ,password );//发送sql//预先编译 ?是占位符,预先写好sql语句存入对象里面,后面通过对象方法存入数据,最后在发送完整的sql语句PreparedStatement preparedStatement = connection.prepareStatement("insert into student(name,gender,birthday,phonenum,adress,height,majorid)values (?,?,?,?,?,?,?)");preparedStatement.setObject(1,NAME);preparedStatement.setObject(2,gender);preparedStatement.setObject(3,birthday);preparedStatement.setObject(4,phonenum);preparedStatement.setObject(5,adress);preparedStatement.setObject(6,height);preparedStatement.setObject(7,majorid);//发送sql语句preparedStatement.executeUpdate();//关闭连接preparedStatement.close();connection.close();}
4.两种jdbc连接方式的区别
preparedstatement 与 statement的区别
相同:都是向数据库发送sql的
不同:prepared statement :先预写sql语句,数据使用?占位,然后通过setobject方法对?依次赋值,由1开始,安全可靠,
在赋值时进行检测,防止被攻击
statement:直接在sql语句1拼接出来,安全性差,例如,可以在删除语句中拼接or 1=1这样每一条数据库信息都会被删除,但是prepared statement会进行检测所有比statement安全一些
5.查数据
jdbc主要功能就是增删改查,增删改方式差不多,知道如何连接就可以发现规律,增删改只需要对数据库数据进行操作,查的话会传回数据,与前面的略有不同。
对于查数据我们还是使用prepared statement,使用他的executeQuery()方法,此方法会返回一个set集合用来存储查找到的的数据,数据可能很多,所有我们可以使用arraylist来存储。
我们首先创建一个student类做举例
public class student {private int id;private String name;private String gender;private Date birthday;private String phonenum;private String adress;private Date regTime;private double heught;private int majorid;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getPhonenum() {return phonenum;}public void setPhonenum(String phonenum) {this.phonenum = phonenum;}public String getAdress() {return adress;}public void setAdress(String adress) {this.adress = adress;}public Date getRegTime() {return regTime;}public void setRegTime(Date regTime) {this.regTime = regTime;}public double getHeught() {return heught;}public void setHeught(double heught) {this.heught = heught;}public int getMajorid() {return majorid;}public void setMajorid(int majorid) {this.majorid = majorid;}@Overridepublic String toString() {return "student{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", birthday=" + birthday +", phonenum='" + phonenum + '\'' +", adress='" + adress + '\'' +", regTime=" + regTime +", heught=" + heught +", majorid=" + majorid +'}';}
}
这是我们数据库中学生表的属性。
public ArrayList<student> select() throws ClassNotFoundException, SQLException {//多条数据Class.forName("com.mysql.cj.jdbc.Driver");String url="jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";String user="root";String password="123456";Connection connection = DriverManager.getConnection(url,user ,password );PreparedStatement preparedStatement = connection.prepareStatement("select * from student where name = ?");preparedStatement.setObject(1,"刘晨");ResultSet set = preparedStatement.executeQuery();ArrayList<student> a = new ArrayList<>();while (set.next()){student st = new student();st.setId(set.getInt("id"));//get里面的字段必须与数据库中要查找的数据的字段相同st.setGender(set.getString("gender"));st.setBirthday(set.getDate("birthday"));st.setName(set.getString("NAME"));st.setHeught(set.getDouble("height"));st.setAdress(set.getString("adress"));st.setMajorid(set.getInt("majorid"));st.setPhonenum(set.getString("phonenum"));st.setRegTime(set.getDate("reg_time"));a.add(st);}set.close();preparedStatement.close();connection.close();return a;}
相关文章:

jdbc(mysql)
1.概述 jdbc:java database connection(java与数据库连接) java可以连接不同数据库,不同数据库连接细节不同,具体细节都由数据库自己实现 由java设计出一系列连接数据库的接口规范,然后由不同的数据库开发…...
【Linux】搜索log在哪个文件中执行的方法
在Linux中,如果你需要找到包含特定文本(比如一段log)的文件,你可以使用grep命令结合一些其他工具来实现这一目的。这里有几个方法可以帮助你找到包含特定log内容的文件。 1. 使用grep直接在特定目录或文件中搜索 如果你知道log大…...
web小游戏开发:2048(完)移动操作及动画效果
web小游戏开发:2048(完)移动操作及动画效果 添加随机数字游戏开始时的初始化显示分数移动和合并获取行列元素下标记录移动轨迹完整的 js小结添加随机数字 书接前文,我们在前边定义了一个 move 方法,暂时先往后放放。 在我们已经初始化好的界面上,我们需要先制作一个出现…...
Redis学习笔记——第20章 Lua脚本
第20章 Lua脚本 20.1 创建并修改Lua环境 20.1.1 创建Lua环境 服务器创建一个新的基本的Lua环境 20.1.2 载入函数库 修改Lua环境,载入一些库函数 20.1.3 创建redis全局表格 全局变量,支持在Lua脚本中执行redis命令 20.1.4 使用redis自制随机函数来…...

MySQL--日志管理
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、日志简介 MySQL日志主要分为4类,使用这些日志文件,可以查看MySQL内部发生的事情。这4类日志分别是: 错误日志࿱…...

【Nuxt】内置组件和全局样式使用
内置组件 Nuxt3框架也提供一些内置的组件,常用的如下: SEO组件:Html、Body、Head、Title、Meta、Style、Link、NoScript、BaseNuxtWelcome:欢迎页面组件,该组件是nuxt/ui的部分NuxtLayout:是Nuxt自带的页面布局组件NuxtPage:是N…...

Java中spring boot validation 自定义注解使用
创建一个注解 Target({ElementType.FIELD})//需要写注解的三三个要素 Retention(RUNTIME) Documented Constraint(validatedBy {IsSystemYesNoVaildation.class})//绑定 在这里会报错 你需要去实现 public interface IsSystemYesNo {String message() default "数据字典&…...
Android笔试面试题AI答之广播(1)
文章目录 1.简述广播的分类和使用场景 ?一、广播分类二、使用场景举例总结 2.广播的两种注册方式的区别?1. 注册位置与方式2. 生命周期与持久性3. 接收广播的时机4. 安全性与权限5. 优先级与有序广播总结 3.简述广播发送和接收的原理 ?一、广…...

微软商店无法加载,检查你的连接-解决方案
微软商店默认直连国内的服务器。 如果有代理,关闭代理就可以恢复网络了。 但是我就是想用代理,我感觉代理更快, 搜索了很多办法,都没有生效。 然后我在哔哩哔哩的视频下方,看到大家留言,测试了一下&#x…...

数据结构实验报告-树与二叉树
桂 林 理 工 大 学 实 验 报 告 一、实验名称: 实验6 树和二叉树 二、实验内容: 1.编写二叉树的递归遍历算法,实现:给定一棵二叉树的“扩展先序遍历序列”,创建这棵二叉树。 (1)输出二叉树的先序遍历的结点序列。 (2)输出二…...

基于Django+MySQL球馆场地预约系统的设计与实现(源码+论文+部署讲解等)
博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍:我是程序员阿龙ÿ…...

8 MQTT
8 MQTT 1、相关概念2、MQTT的操作过程3、MQTT协议3.1 固定报文3.2 连接报文3.3 确认连接请求3.4 构造订阅报文3.5 订阅确认报文3.6 发布报文3.7 其他报文 1、相关概念 MQTT [1] 全名为Message Queuing Telemetry Transport,是一种基于TCP/IP协议上传输的轻量级通信…...

【文件系统】抽象磁盘的存储结构 CHS寻址法 | sector数组 | LAB数组
目录 1.为什么要抽象 2.逻辑抽象_版本1 2.1sector数组 2.2index转化CHS 3.逻辑抽象_版本2 3.1LBA数组 3.2LAB下标转化sector下标 文件其实就是在磁盘中占有几个扇区的问题❗文件是很多个sector的数组下标❗文件是有很多块构成的❗❗文件由很多扇区构成------>文件…...

基于python旅游推荐系统(源码+论文+部署讲解等)
博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍:我是程序员阿龙ÿ…...
Mysql大单表JSON优化
优化方案 MySQL 8.0.32 中,有几种方法可以优化存储 JSON 字符串的数据表。以下是一些建议,可以帮助您减少存储空间: 使用压缩: MySQL 8.0 支持表级压缩,可以通过修改表来启用压缩。 ALTER TABLE your_table ROW_FORMATCOMPRESS…...

电脑开机启动项管理小工具,绿色免安装
HiBit Startup Manager 是一款功能强大的启动项管理工具,旨在帮助用户管理和优化计算机的自动启动程序。该软件通过添加或删除应用程序、编辑它们的属性以及管理流程、服务、任务调度程序和上下文菜单来实现这一目标。 HiBit Startup Manager 提供了以下主要功能&a…...

一例AutoHotkey语言生成的文件夹病毒分析
概述 这是一个使用AutoHotkey语言编写的文件夹病毒,使用ftp服务器来当作C2,通过U盘传播,样本很古老,原理也很简单,这种语言的样本还是第一次见到,记录一下。 样本的基本信息 PE32库: AutoIt(3.XX)[-]编译…...

【机器学习第7章——贝叶斯分类器】
机器学习第7章——贝叶斯分类器 7.贝叶斯分类器7.1贝叶斯决策论7.2 朴素贝叶斯分类器条件概率的m估计 7.3 极大似然估计优点基本原理 7.4 贝叶斯网络7.5 半朴素贝叶斯分类器7.6 EM算法7.7 EM算法实现 7.贝叶斯分类器 7.1贝叶斯决策论 一个医疗判断问题 有两个可选的假设&#…...

C++ QT开发 学习笔记(3)
C QT开发 学习笔记(3) - WPS项目 标准对话框 对话框类说明静态函数函数说明QFileDialog文件对话框getOpenFileName()选择打开一个文件getOpenFileNames()选择打开多个文件getSaveFileName()选择保存一个文件getExistingDirectory()选择一个己有的目录getOpenFileUrl()选择打幵…...

【Python实战】如何优雅地实现文字 二维码检测?
前几篇,和大家分享了如何通过 Python 和相关库,自动化处理 PDF 文档,提高办公效率。 【Python实战】自动化处理 PDF 文档,完美实现 WPS 会员功能【Python实战】如何优雅地实现 PDF 去水印?【Python实战】一键生成 PDF…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...