PreparedStatement 简介
PreparedStatement 使用示例
stringsql = "select * from people p where p.id = ? and p.name = ?";
preparedstatement ps = connection.preparestatement(sql);
//setxxx() 方法的第一个参数表示 ? 所在的位置,从1开始计算,第二个参数表示对应的值
ps.setint(1,id);
ps.setstring(2,name);
resultset rs = ps.executequery();
共同点:
PreparedStatement和Statement都是用来执行SQL查询语句的API之一。
不同点:
在PreparedStatement中,当我们经常需要反复执行一条结构相似的sql语句,比如:
insert into table values(0,‘first’,1);
insert into table values(0,‘second’,2);
我们可以使用带占位符的sql来代替它:
insert into table values(0,?,?);
然后每次传入参数即可,但是Statement中是不允许使用占位符的,更没有带参数。而且更重要的是PreparedStatement会预编译sql语句,把预编译后的sql语句存在对象中,那么这样每次传入参数执行查询等操作会变得非常高效,也就是说PreparedStatement比Statement高效。PreparedStatement还提供了一系列的setXxx(int index, Xxx value)方法来传入参数。
PreparedStatement可以防止SQL注入式攻击:
比如:某个网站的登录验证SQL查询代码为:
strSQL = “SELECT * FROM users WHERE name = '” + userName + “’ and pw = '”+ passWord +"’;"
恶意填入:
userName = “1’ OR ‘1’='1”;
passWord = “1’ OR ‘1’='1”;
那么最终SQL语句变成了:
strSQL = “SELECT * FROM users WHERE name = ‘1’ OR ‘1’=‘1’ and pw = ‘1’ OR ‘1’=‘1’;”
因为WHERE条件恒为真,这就相当于执行:
strSQL = “SELECT * FROM users;”
因此可以达到无账号密码亦可登录网站。
都已经登陆数据库了,后面想干啥还能让你控制么?
然而使用PreparedStatement的参数化的查询可以阻止大部分的SQL注入。在使用参数化查询的情况下,数据库不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行。
PreparedStatement 简介相关推荐
- Java开发实战经典 目录
目录 第1部分 Java基础程序设计 第1章 Java概述及开发环境搭建 2 视频讲解:35分钟 1.1 认识Java 2 1.1.1 什么是Java 2 1.1.2 Java语言的特点 3 ...
- Ty-JDBC学习笔记
概述 JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统.通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(j ...
- Java 学习笔记(导航目录)
Java学习计划 ☕️学习目标 ☕️学习目录 第1部分 Java基础程序设计 第1章 Java概述及开发环境搭建 第2章 简单的Java程序 第3章 Java基础程序设计 第4章 数组与方法 第2部分 ...
- Java学习笔记之JDBC
JDBC 穷且益坚 不坠青云之志 文章目录 JDBC 一.概念 1. 简介 二.入门 1. 步骤 2. 代码 三.详解 1. 各个对象 2. 详解 2.1 DriverManager 2.2 Conn ...
- 双表查询java代码_什么是JDBC?Java数据库连接性简介
JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...
- JDBC—01—JDBC简介;JDBC常用接口与类;
一. JDBC 简介 1 什么是 JDBC JDBC(Java DataBase Connectivity)java 数据库连接 是 JavaEE 平台下的技术规范 定义了在 Java 语言中连接数据 ...
- 第16讲:ODBCJDBC简介
一.ODBC简介 1. ODBC的概念 ①ODBC:Open DataBase Connection,即开放数据库连接 ②ODBC是一种标准,它规定了不同语言的应用程序与不同数据库服务器之间通讯的方式 ...
- Ibatis学习总结1--ibatis简介和SQL Maps
最佳维护的一个项目使的是ibatis框架,在闲暇之余将手头的开发手册和平时开发的理解做一下总结,言归正传. 简介 使用 SQL Map,能够大大减少访问关系数据库的代码.SQL Map 使用简单的 X ...
- pl/postgresql_PostgreSQL PL / java简介
pl/postgresql 现代数据库允许以多种语言编写存储过程. 一种常见的实现语言是java.NB,本文讨论了PostgreSQL特定的Java实现. 其他数据库的详细信息将有所不同,但概念将相同 ...
- PostgreSQL PL / java简介
现代数据库允许以多种语言编写存储过程. 一种常见的实现语言是java.NB,本文讨论了PostgreSQL特定的Java实现. 其他数据库的详细信息会有所不同,但是概念是相同的. PL / Java的 ...
最新文章
- jQuery实例——仿京东仿淘宝列表导航菜单
- Java开发环境配置——Tomcat
- mysql远程连接数据库的二种方法_mysql 远程连接数据库的二种方法
- SpringCloud从入门到进阶(九)——单点部署Zuul的压力测试与调优(二)
- 深度学习 图像分类_深度学习时代您应该阅读的10篇文章了解图像分类
- 对于个人(注册表)与团队(团队表)(两张表没有关联)的展示与可空判断
- 前谷歌资深架构师:真正搞懂spring底层到底有什么好处?
- 打造自己的分布式搜索引擎底层架构(非Lucene)
- rest-assured之获取响应数据(Getting Response Data)
- java 判断正负数_Java判断一个字符串为数字(正负、小数)
- android大智慧安装目录,大智慧新一代目录文件结构
- python进阶教程之异常处理
- jQuery 生成随机字符
- 内联css加伪元素,使用CSS:前和:后内联CSS伪元素?(Using CSS :before and :after p
- IOS 13陀螺仪监控
- codeforces 337 D(树的直径性质)
- Linux wifi hostpad,将你的电脑变身无线路由wifi host, ipad/ipod/手机一起来无线互联吧...
- uniapp发布为H5并部署运行
- 性能测试平台搭建及简单使用(jmeter分布式+influxdb2.0+grafana)附性能测试报告
- word的奇葩功能--隐藏文字
热门文章
- 联想笔记本电脑B490、B480拆机教程(清灰、换硅脂、换散热器)详细步骤
- QGC调试px4固件飞控
- 评课用计算器计算机,《巧用计算器》评课稿
- excel文件修复工具_TunesKit Video Repair下载_视频文件修复工具官方版下载[修复工具]...
- cf的服务器型号,常用CF法兰的型号和尺寸表
- 【CV】MobileNetV2:具有倒置残差和线性瓶颈的 CNN 骨干网络
- git文件没有绿色红色小图标
- 数字电路逻辑设计_第三版_微课版_第五章思考题与练习题(附答案)
- EWSA1.50.0.298栈溢出错误
- ppt菜鸟学飞第一天——基础知识及字体知识