Statement 和 PreparedStatement之间的关系和区别.
    关系:PreparedStatement继承自Statement,都是接口
    区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高

为什么使用 PreparedStatement?

在使用 PreparedStatement之前我们来看一下使用Statement的一个缺点

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
public class exercises5 {public static void main(String[] args) throws Exception{Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/epet?characterEncoding=utf8","root","");Scanner input=new Scanner(System.in);System.out.println("请输入用户名:");String name=input.next();System.out.println("请输入密码:");String pass=input.next();String sql="select * from master where `name`=? and password=?";PreparedStatement ps=conn.prepareStatement(sql);ps.setString(1,name);ps.setString(2,pass);ResultSet rs=ps.executeQuery();System.out.println(sql);if(rs.next()){System.out.println("登录成功,欢迎你!");}else{System.out.println("登录失败!");}}
}

如果输入正确,输出登陆成功,否则输出登录失败。如图:

但是我们输入了精心设计的内容,即时姓名和密码都是错误的,仍然可以显示登录成功

这是因为在使用Statement接口方法时我们需要进行sql语句的拼接,我们这样拼接不仅麻烦而且很容易出错。这就是网上典型的SQL注入攻击

这个时候使用PreparedStatement接口就不存在这个问题了

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class exercises5 {public static void main(String[] args) throws Exception{Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/epet?characterEncoding=utf8","root","");Scanner input=new Scanner(System.in);System.out.println("请输入用户名:");String name=input.next();System.out.println("请输入密码:");String pass=input.next();String sql="select * from master where `name`=? and password=?";PreparedStatement ps=conn.prepareStatement(sql);ps.setString(1,name);ps.setString(2,pass);System.out.println(sql);if(ps.execute()) System.out.println("登录成功,欢迎你!");else System.out.println("登录失败!");}
}

如果输入正确,输出登陆成功,否则输出登录失败。如图:

当我们密码输入错误的时候

由此我们可以总结出 PreparedStatement相对于Statement的优点

  1. 提高了代码的可读性和可维护性
  2. 提高了sql语句执行性能
  3. 提高了安全性

Statement和PreparedStatement的区别/PreparedStatement和Statement比较的优点相关推荐

  1. Statement与PreparedStatement的区别

    Statement与PreparedStatement的区别 PreparedStatement预编译SQL语句,性能好. PreparedStatement无序拼接SQL语句,编程更简单. Prep ...

  2. JDBC中Statement与PreparedStatement的区别

    http://www.blogjava.net/redcoatjk/archive/2012/07/20/383583.html 1. statement每次执行sql语句,相关数据库都要执行sql语 ...

  3. 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...

    1.Statement与PreparedStatement的区别 1)都可用于  把sql语句从java程序中发送到制定数据库,并执行sql语句. 2)区别 直接使用Statement,驱动程序一般不 ...

  4. 浅析Statement和PreparedStatement的区别

    当我们使用java程序来操作sql server时会使用到Statement和PreparedStatement,俩者都可以用于把sql语句从java程序中发送到指定数据库,并执行sql语句.那么如何 ...

  5. Statement和PreparedStatement的区别及联系

    两者之间的联系: Statement和PreparedStatement两者都是用来执行SQL查询语句的API之一 PreparedStatement接口继承了Statement接口 两者之间的区别: ...

  6. java Statement与preparedStatement的区别

    1.数据库执行preparedStatement的时候会预编译,下次再执行此sql语句的时候,数据库端将不会再进行预编译了,而直接去数据库的缓存区,提高访问的效率. 2.在任何时候都不要使用State ...

  7. JDBC中的Statement和PreparedStatement的区别

    PreparedStatement是什么?PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement ...

  8. Statement和PreStatement的区别 以及 #{}和${}的区别

    一.语法 prepareStatement在mybatis中获取的时候,就已经完成预编译,和用ParameterHandler 设置参数了,后面用它来执行sql语句,只剩执行了 预编译是需要mysql ...

  9. statement和prepareStatement的区别

    一.语法 两者的语法区别 statement语法 Statement stmt = connect.createStatement(); String sql= "SELECT * FROM ...

最新文章

  1. 01 多线程概念及其实现方式
  2. Windows下编译Chrome V8
  3. RDKit | 基于随机森林的化合物活性二分类模型
  4. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(配置点的形状、大小)实战
  5. Android--用手指移动画面里的照片/onTouchEvent事件判断
  6. Git clone命令出现fatal repository not found错误
  7. 【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )
  8. seo自动发布外链工具_没资源、零经验,如何建立高质量外链?
  9. spin lock自旋锁
  10. PHP用substr截取字符串出现中文乱码问题用mb_substr
  11. 5.mybatis实战教程(mybatis in action)之五:与spring3集成(附源码)
  12. php window open,【php】window.open()弹出窗口被拦截.
  13. PyCharm(Python编译器汉化)
  14. AXURE 8.1.0.3382 有效激活码
  15. 分享一个USB转杜邦线 5V取电的3D打印件,附3D打印文件
  16. 能模仿韩寒小四写作的神奇循环神经网络
  17. Win10 使用HDMI链接显示器
  18. xtrabackup 实现mysql的全量备份与增量备份
  19. 【2】Kali破解家用WI-FI密码 - WPA/WPA2加密
  20. faster rcn固定输入图片尺寸(一)

热门文章

  1. gateway的基本使用
  2. SQL CASE语句的使用
  3. 敏涵控股集团董事长刘敏: “匠心精神”的专业引路人
  4. delphi 画图表,曲线图
  5. 1.2.1 python中的函数
  6. vue中directives的用法
  7. RC4原理以及Python实现
  8. 炫酷可视化教程 Cufflinks 来啦!!!
  9. ICPR-2018-OCR笔记
  10. 文件下载及解决中文名乱码问题