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 简介相关推荐

  1. Java开发实战经典 目录

    目录 第1部分  Java基础程序设计 第1章  Java概述及开发环境搭建 2 视频讲解:35分钟 1.1  认识Java 2 1.1.1  什么是Java 2 1.1.2  Java语言的特点 3 ...

  2. Ty-JDBC学习笔记

    概述 JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统.通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(j ...

  3. Java 学习笔记(导航目录)

    Java学习计划 ☕️学习目标 ☕️学习目录 第1部分 Java基础程序设计 第1章 Java概述及开发环境搭建 第2章 简单的Java程序 第3章 Java基础程序设计 第4章 数组与方法 第2部分 ...

  4. Java学习笔记之JDBC

    JDBC 穷且益坚 不坠青云之志 文章目录 JDBC 一.概念 1. 简介 二.入门 1. 步骤 2. 代码 三.详解 1. 各个对象 2. 详解 2.1 DriverManager 2.2 Conn ...

  5. 双表查询java代码_什么是JDBC?Java数据库连接性简介

    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...

  6. JDBC—01—JDBC简介;JDBC常用接口与类;

    一. JDBC 简介 1 什么是 JDBC JDBC(Java DataBase Connectivity)java 数据库连接 是 JavaEE 平台下的技术规范 定义了在 Java 语言中连接数据 ...

  7. 第16讲:ODBCJDBC简介

    一.ODBC简介 1. ODBC的概念 ①ODBC:Open DataBase Connection,即开放数据库连接 ②ODBC是一种标准,它规定了不同语言的应用程序与不同数据库服务器之间通讯的方式 ...

  8. Ibatis学习总结1--ibatis简介和SQL Maps

    最佳维护的一个项目使的是ibatis框架,在闲暇之余将手头的开发手册和平时开发的理解做一下总结,言归正传. 简介 使用 SQL Map,能够大大减少访问关系数据库的代码.SQL Map 使用简单的 X ...

  9. pl/postgresql_PostgreSQL PL / java简介

    pl/postgresql 现代数据库允许以多种语言编写存储过程. 一种常见的实现语言是java.NB,本文讨论了PostgreSQL特定的Java实现. 其他数据库的详细信息将有所不同,但概念将相同 ...

  10. PostgreSQL PL / java简介

    现代数据库允许以多种语言编写存储过程. 一种常见的实现语言是java.NB,本文讨论了PostgreSQL特定的Java实现. 其他数据库的详细信息会有所不同,但是概念是相同的. PL / Java的 ...

最新文章

  1. jQuery实例——仿京东仿淘宝列表导航菜单
  2. Java开发环境配置——Tomcat
  3. mysql远程连接数据库的二种方法_mysql 远程连接数据库的二种方法
  4. SpringCloud从入门到进阶(九)——单点部署Zuul的压力测试与调优(二)
  5. 深度学习 图像分类_深度学习时代您应该阅读的10篇文章了解图像分类
  6. 对于个人(注册表)与团队(团队表)(两张表没有关联)的展示与可空判断
  7. 前谷歌资深架构师:真正搞懂spring底层到底有什么好处?
  8. 打造自己的分布式搜索引擎底层架构(非Lucene)
  9. rest-assured之获取响应数据(Getting Response Data)
  10. java 判断正负数_Java判断一个字符串为数字(正负、小数)
  11. android大智慧安装目录,大智慧新一代目录文件结构
  12. python进阶教程之异常处理
  13. jQuery 生成随机字符
  14. 内联css加伪元素,使用CSS:前和:后内联CSS伪元素?(Using CSS :before and :after p
  15. IOS 13陀螺仪监控
  16. codeforces 337 D(树的直径性质)
  17. Linux wifi hostpad,将你的电脑变身无线路由wifi host, ipad/ipod/手机一起来无线互联吧...
  18. uniapp发布为H5并部署运行
  19. 性能测试平台搭建及简单使用(jmeter分布式+influxdb2.0+grafana)附性能测试报告
  20. word的奇葩功能--隐藏文字

热门文章

  1. 联想笔记本电脑B490、B480拆机教程(清灰、换硅脂、换散热器)详细步骤
  2. QGC调试px4固件飞控
  3. 评课用计算器计算机,《巧用计算器》评课稿
  4. excel文件修复工具_TunesKit Video Repair下载_视频文件修复工具官方版下载[修复工具]...
  5. cf的服务器型号,常用CF法兰的型号和尺寸表
  6. 【CV】MobileNetV2:具有倒置残差和线性瓶颈的 CNN 骨干网络
  7. git文件没有绿色红色小图标
  8. 数字电路逻辑设计_第三版_微课版_第五章思考题与练习题(附答案)
  9. EWSA1.50.0.298栈溢出错误
  10. ppt菜鸟学飞第一天——基础知识及字体知识