PreparesStatement比Statement的优势

优势1:代码可读性/维护性更高。

优势2:PreparedStatement的执行性能更高。

  PreparedStatement是预编译语句对象,怎么理解。
      1.安全性检查2.SQL语法分析3.语法编译:编译成二进制4.选择并执行一个计划在有的数据库服务器中:会把每次执行的SQL给缓存下来,若下次的SQL已经在缓存中,则直接执行第四部。//事实证明mysql不会把每次执行的缓存下来,性能并没有增加!
//使用Statement插入1000条数据//Innodb:35016//Myisam:611@Testpublic void test1() throws Exception {Long begin = System.currentTimeMillis();Connection conn = JdbcUtil.INSTANCE.getConn();Statement st = conn.createStatement();for (int i = 1; i < 1001; i++) {String sql = "insert into t_user (username,email) values ('西门','哈哈')";st.executeUpdate(sql );}JdbcUtil.INSTANCE.close(conn, st, null);System.out.println(System.currentTimeMillis() - begin);}//使用PreparedStatement插入1000条数据//Innodb:30008//Myisam:658@Testpublic void test2() throws Exception {Long begin = System.currentTimeMillis();Connection conn = JdbcUtil.INSTANCE.getConn();String sql = "insert into t_user (username,email) values (?,?)";PreparedStatement ps = conn.prepareStatement(sql);for (int i = 1; i < 1001; i++) {ps.setString(1, "");ps.setString(2, "");ps.executeUpdate();}JdbcUtil.INSTANCE.close(conn, ps, null);System.out.println(System.currentTimeMillis() - begin);}

优势3:安全性更高,防止SQL注入问题。

登录设计的时候,Statement不如PreparedStatement安全!//把' or 1 = 1  or '带入账号中不正确@Testpublic void tastPreparedStatementStatementLogin() throws Exception {Connection conn = JdbcUtil.INSTANCE.getConn();String sql = "SELECT * FROM t_user where username = ? and password = ?";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, "' or 1 = 1  or '");    ps.setString(2, "1");ResultSet rs = ps.executeQuery();if(rs.next()){System.out.println("ok啦....");}else{System.out.println("nook啦....");}JdbcUtil.INSTANCE.close(conn, ps, rs);}//把' or 1 = 1  or '带入则正确就是因为它把username = '' or 1 = 1  or ''分开看前面false后面ture@Testpublic void tastStatementLogin() throws Exception {Connection conn = JdbcUtil.INSTANCE.getConn();Statement st = conn.createStatement();//  String sql = "SELECT * FROM t_user where username = 'admin' and password = '1'";String sql = "SELECT * FROM t_user where username = '' or 1 = 1  or '' and password = '1'";ResultSet rs = st.executeQuery(sql);if(rs.next()){System.out.println("ok啦....");}else{System.out.println("nook啦....");}JdbcUtil.INSTANCE.close(conn, st, rs);}

PreparedStatement跟Statement的对比相关推荐

  1. oracle preparedstatement,oracle_选用PreparedStatement还是statement

    1.PreparedStatement和statement对比 如果只执行单个SQL语句,那么不用说肯定是Statement的效率高,因为PreparedStatement需要花时间先预编译,但不会产 ...

  2. Java中PreparedStatement和Statement的用法区别

    Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Sta ...

  3. 应该始终以PreparedStatement代替Statement

    在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement 一.代码的可读性和可维护性. 虽 ...

  4. PreparedStatement和Statement比较

    在选择使用Statement时,会产生SQL注入: @Testpublic void testSave(){String name = "a' or 1=1 or 1='";Str ...

  5. java PreparedStatement和statement的区别

    1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象.2.作为 St ...

  6. preparedStatement和Statement 有什么不一样

    1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象. 2.作为 S ...

  7. 数据库中关于preparedStatement和Statement分析

    引用: http://zhidao.baidu.com/link?url=GT7fotu8j4V0Yf_gYwcceE1u2MsgT-6NKz18K_neo715rE-V11Ny-EHW4OZNkhF ...

  8. 【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化

    目录 ​ 一.PreparedStatement和Statement的区别去联系 一.preparedStatement与Statement的联系: 二.区别: 二.批量插入数据到数据的逐步优化 一. ...

  9. PreparedStatement和Statement的区别

    PreparedStatement 和 Statement 的区别:1.PreparedStatement在使用时只需要编译一次,就可以运行多次,Statement每运行一次就编译一次,所以Prepa ...

最新文章

  1. 一个C#睡觉前的夜晚
  2. Spring Boot怎么样注册Servlet三大组件[Servlet、Filter、Listener]
  3. 怎样自动提取邮件的内容_流程自动化和人工智能如何创建智慧物流?
  4. SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
  5. Golang CSP并发模型
  6. Pandas必知必会的使用技巧,值得收藏!
  7. ssl1626-花店橱窗布置【日常dp】
  8. LoRa无线通信模块在运动安全上的物联网运用
  9. xamarin android 标签,安卓端Tabbedpage调整在底部位置和标签及取消Android API28 以下的点击特效—-xamarin.forms学习笔记(一)...
  10. hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations)
  11. 台湾一公司因停电,让员工手写代码...
  12. 实现鼠标放上高亮显示,鼠标移出显示原来的颜色
  13. 电力职称计算机水平考试题库 2019,2019职称计算机考试Excel练习及答案汇总1
  14. 游戏辅助 -- 走路call中ecx值分析
  15. Hydration 是什么?
  16. java interrupt详解_Java线程源码解析之interrupt
  17. 快速获取一个网站的所有资源,图片,html,css,js......扒站,仿站必备工具
  18. QEMU零知识学习2 —— QEMU源码下载
  19. 红外循迹TCRT5000 舵机SG90
  20. 20年前iPod改变了世界,20年后它变成了怀旧机器

热门文章

  1. Spring 中那些让你爱不释手的代码技巧
  2. python棋盘覆盖问题_棋盘覆盖问题可视化动图——python
  3. 2021年北京学校高考成绩查询,2021年北京高考成绩查询时间及入口【官方】
  4. vue动态加载静态资源
  5. day1 java基础回顾-多线程
  6. 第八周PLC编程练习
  7. PAT 1012 数字分类 (20)
  8. [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
  9. CGAL4.4+VC2008编译
  10. centos 6.7 mysql 5.6_CentOS 6.7 安装 MySQL 5.6 思路整理