MySQL——PreparedStatement对象

PreparedStatement可以防止SQL注入,效率更高。

1. 增

public class TestInsert {public static void main(String[] args) throws SQLException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = jdbcUtils.getConnection();// 区别// 使用问号占位符代替参数String sql = "INSERT INTO users(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";ps = conn.prepareStatement(sql);  // 预编译SQl,先写sql,然后不执行// 手动给参数赋值ps.setInt(1,5);ps.setString(2,"haha");ps.setString(3,"55555");ps.setString(4,"5555@qq.com");// 注意点:sql.Date:数据库用      util.Date:Java用    Date().getTime():获得时间戳   java.sql.Date():转换ps.setDate(5, new java.sql.Date(new Date().getTime()));// 执行int i = ps.executeUpdate();if (i>0){System.out.println("插入成功!");}} catch (SQLException e) {throw new RuntimeException(e);}finally {jdbcUtils.release(conn,ps,null);}}
}

2. 删

public class TestDelete {public static void main(String[] args) throws SQLException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = jdbcUtils.getConnection();// 区别// 使用问号占位符代替参数String sql = "delete from users where id = ?";ps = conn.prepareStatement(sql);  // 预编译SQl,先写sql,然后不执行// 手动给参数赋值ps.setInt(1,5);// 执行int i = ps.executeUpdate();if (i>0){System.out.println("删除成功!");}} catch (SQLException e) {throw new RuntimeException(e);}finally {jdbcUtils.release(conn,ps,null);}}
}

3. 改

public class TestUpdate {public static void main(String[] args) throws SQLException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = jdbcUtils.getConnection();// 区别// 使用问号占位符代替参数String sql = "update users set `NAME`=? where id=?";ps = conn.prepareStatement(sql);  // 预编译SQl,先写sql,然后不执行// 手动给参数赋值ps.setString(1,"hahaha");ps.setInt(2,5);// 执行int i = ps.executeUpdate();if (i>0){System.out.println("修改成功!");}} catch (SQLException e) {throw new RuntimeException(e);}finally {jdbcUtils.release(conn,ps,null);}}
}

4. 查

public class TestSelect {public static void main(String[] args) throws SQLException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = jdbcUtils.getConnection();String sql = "select * from users where id=?";  // 编写SQLps = conn.prepareStatement(sql);  // 预编译ps.setInt(1,4);  // 传递参数rs = ps.executeQuery();  // 执行if (rs.next()){System.out.println(rs.getString("NAME"));}} catch (SQLException e) {throw new RuntimeException(e);}finally {jdbcUtils.release(conn,ps,rs);}}
}

5. 防止SQL注入

public class 防止SQL注入 {public static void main(String[] args) throws SQLException {login("chenyang8","123456");  //正常登录//login(" ' 'or 1=1","123456");  // 技巧}// 登录业务public static void login(String username, String password) throws SQLException {Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try {conn = jdbcUtils.getConnection();// PreparedStatement 防止SQl注入的本质,把传递进来的参数当作字符// 假设其中存在转义字符,比如说 ' 会被直接转义String sql = "select * from users where `NAME`=? and `PASSWORD`=?";st = conn.prepareStatement(sql);st.setString(1,username);st.setString(2,password);rs = st.executeQuery();  //查询完毕会返回一个结果集while (rs.next()){System.out.println(rs.getString("NAME"));System.out.println(rs.getString("PASSWORD"));}} catch (SQLException e) {throw new RuntimeException(e);}finally {jdbcUtils.release(conn,st,rs);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1474057.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

力扣双指针算法题目:二叉树的层序遍历(BFS)

目录 1.题目 2.思路解析 3.代码 1.题目 . - 力扣(LeetCode) 2.思路解析 对二叉树进行层序遍历,顾名思义,就是按每一层的顺序对二叉树一层一层地进行遍历 思路如下 从第一层开始,先将二叉树地头放入队列q&#xff0…

永磁同步电机参数辨识算法--模型参考自适应辨识电感

本文采用 MRAS 在线辨识电感参数(Ld、Lq) 一、原理介绍 从组成部分来看,MRAS由三个重要部分构成分别为参考、可调以及自适应律。参考模型相当于IPMSM 参数实时变化的准确值,即作为可调模型的参考值,可调模型依据参数…

如何将Grammarly内嵌到word中(超简单!)

1、下载 安装包下载链接见文章结尾 官网的grammarly好像只能作为单独软件使用,无法内嵌到word中🧐🧐🧐 2、双击安装包(安装之前把Office文件都关掉) 3、安装完成,在桌面新建个word文件并打开 注…

IT高手修炼手册(3)程序员命令

一、前言 程序员在日常工作中,掌握一些高效的快捷键可以大大提高编码和开发效率。 二、通用快捷键 文本操作Ctrl A:全选当前页面内容 Ctrl C:复制当前选中内容 Ctrl V:粘贴当前剪贴板内的内容 Ctrl X:剪切当前选中…

[Godot3.3.3] – 玩家死亡动画 part-1

设计模式和介绍 由于玩家脚本中代码冗余较大(接近 150 行即将成为屎山代码),所以将玩家死亡设计成一个新的场景,并在玩家死亡后将这个死亡场景添加到玩家身上并删除玩家,从而简化项目的逻辑,减少代码的耦合…

Apache Seata 源码分析Seata-XID传递 Dubbo篇

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 源码分析 Seata-XID 传递 Dubbo 篇 本文作者:FUNKYE(陈健斌),杭州某互联网公司主…

Git 运用小知识

1.Git添加未完善代码的解决方法 1.1 Git只是提交未推送 把未完善的代码提交到本地仓库 只需点击撤销提交,提交的未完善代码会被撤回 代码显示未提交状态 1.2 Git提交并推送 把未完善的代码提交并推送到远程仓库 点击【未完善提交并推送】的结点选择还原提交&#x…

DAMA学习笔记(四)-数据建模与设计

1.引言 数据建模是发现、分析和确定数据需求的过程,用一种称为数据模型的精确形式表示和传递这些数据需求。建模过程中要求组织发现并记录数据组合的方式。数据常见的模式: 关系模式、多维模式、面向对象模式、 事实模式、时间序列模式和NoSQL模式。按照描述详细程度…

scrapy写爬虫

Scrapy是一个用于爬取网站数据并提取结构化信息的Python框架 一、Scrapy介绍 1.引擎(Engine) – Scrapy的引擎是控制数据流和触发事件的核心。它管理着Spider发送的请求和接收的响应,以及处理Spider生成的Item。引擎是Scrapy运行的驱动力。…

探索LlamaIndex:如何用Django打造高效知识库检索

简介 LlamaIndex(前身为 GPT Index)是一个数据框架,为了帮助我们去建基于大型语言模型(LLM)的应用程序。 主要用于处理、构建和查询自定义知识库。 它支持多种数据源格式 excel,txt,pdf&…

Matlab中collectPlaneWave函数的应用

查看文档如下: 可以看出最多5个参数,分别是阵列对象,信号幅度,入射角度,信号频率,光速。 在下面的代码中,我们先创建一个3阵元的阵列,位置为:(-1,0,0&#x…

【linux进程】进程地址空间(什么是进程地址空间?为什么要有进程地址空间?)

目录 一、前言 二、 程序的地址空间是真实的 --- 物理空间吗? 三、进程地址空间 🔥 操作系统是如何建立起进程与物理内存之间的联系的呢? 🔥什么是进程地址空间? 🔥为什么不能直接去访问物理内存&a…

c小红的图上划分(牛客127)

题意: 有一个无向图,有 n 个点 m 条边,q 个询问,每次给出 L,R,求将图划分为至少 L 个连通块,最多 R个连通块的最大划分价值,若不可划分输出 "NO ANSWER"。 图的划分定义为将图划分为一…

Tabu Search — 温和介绍

Tabu Search — 温和介绍 目录 Tabu Search — 温和介绍 一、说明 二、什么是禁忌搜索以及我可以在哪里使用它? 三、禁忌搜索原则 四、短期记忆和积极搜索: 五、举例时间 六、结论: 七、参考: 一、说明 最近,我参加了…

机器学习筑基篇,​Ubuntu 24.04 编译安装 Python 及多版本切换

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Ubuntu 24.04 编译安装最新Python及多版本切换 描述:说到机器学习,人工智能,深度学习不免会提到Python这一门编程语言(人生苦短,及时Pyt…

蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——FreeRTOS任务调度方式

一、任务调度方式 1.1抢占式调度(不同优先级) 主要是针对优先级不同的任务,每个任务都有一个优先级, 优先级高的任务可以抢占优先级低的任务。1.2时间片调度(同优先级) 主要针对优先级相同的任务&#x…

三、虚拟机连接外网

来源网站:山海同行 来源地址:https://shanhaigo.cn 本篇资源:以整理分类并关联本篇地址 本篇地址:https://shanhaigo.cn/courseDetail/1805875642621952000 一、配置虚拟机 1. 选择NAT模式 编辑虚拟网络设置,选择NAT…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道,属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…

SQL脚本初始化数据

创建或选择某个数据库,运行窗口输入:source,再拖入文件,回车即可; 虽然也可以使用图形化工具初始化数据,但是他会有内存限制,也就是较大的sql文件不可以初始化,而运行窗口没有sql文件大小限制&…

纹波和噪声的介绍以及区别

纹波和噪声的介绍 纹波和噪声都是在电源输出中出现的信号波动,但两者存在明显的区别。   纹波:是附着于直流电平之上的包含周期性与随机性成分的杂波信号。在额定输出电压、电流的情况下,纹波指的是输出电压中的交流电压的峰值 。狭义上的纹…