PreparedStatement跟Statement的对比
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的对比相关推荐
- oracle preparedstatement,oracle_选用PreparedStatement还是statement
1.PreparedStatement和statement对比 如果只执行单个SQL语句,那么不用说肯定是Statement的效率高,因为PreparedStatement需要花时间先预编译,但不会产 ...
- Java中PreparedStatement和Statement的用法区别
Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈 1. PreparedStatement接口继承Sta ...
- 应该始终以PreparedStatement代替Statement
在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement 一.代码的可读性和可维护性. 虽 ...
- PreparedStatement和Statement比较
在选择使用Statement时,会产生SQL注入: @Testpublic void testSave(){String name = "a' or 1=1 or 1='";Str ...
- java PreparedStatement和statement的区别
1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象.2.作为 St ...
- preparedStatement和Statement 有什么不一样
1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象. 2.作为 S ...
- 数据库中关于preparedStatement和Statement分析
引用: http://zhidao.baidu.com/link?url=GT7fotu8j4V0Yf_gYwcceE1u2MsgT-6NKz18K_neo715rE-V11Ny-EHW4OZNkhF ...
- 【笔试面试考点】PreparedStatement和Statement的区别与联系批量插入数据的优化
目录 一.PreparedStatement和Statement的区别去联系 一.preparedStatement与Statement的联系: 二.区别: 二.批量插入数据到数据的逐步优化 一. ...
- PreparedStatement和Statement的区别
PreparedStatement 和 Statement 的区别:1.PreparedStatement在使用时只需要编译一次,就可以运行多次,Statement每运行一次就编译一次,所以Prepa ...
最新文章
- 一个C#睡觉前的夜晚
- Spring Boot怎么样注册Servlet三大组件[Servlet、Filter、Listener]
- 怎样自动提取邮件的内容_流程自动化和人工智能如何创建智慧物流?
- SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
- Golang CSP并发模型
- Pandas必知必会的使用技巧,值得收藏!
- ssl1626-花店橱窗布置【日常dp】
- LoRa无线通信模块在运动安全上的物联网运用
- xamarin android 标签,安卓端Tabbedpage调整在底部位置和标签及取消Android API28 以下的点击特效—-xamarin.forms学习笔记(一)...
- hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations)
- 台湾一公司因停电,让员工手写代码...
- 实现鼠标放上高亮显示,鼠标移出显示原来的颜色
- 电力职称计算机水平考试题库 2019,2019职称计算机考试Excel练习及答案汇总1
- 游戏辅助 -- 走路call中ecx值分析
- Hydration 是什么?
- java interrupt详解_Java线程源码解析之interrupt
- 快速获取一个网站的所有资源,图片,html,css,js......扒站,仿站必备工具
- QEMU零知识学习2 —— QEMU源码下载
- 红外循迹TCRT5000 舵机SG90
- 20年前iPod改变了世界,20年后它变成了怀旧机器
热门文章
- Spring 中那些让你爱不释手的代码技巧
- python棋盘覆盖问题_棋盘覆盖问题可视化动图——python
- 2021年北京学校高考成绩查询,2021年北京高考成绩查询时间及入口【官方】
- vue动态加载静态资源
- day1 java基础回顾-多线程
- 第八周PLC编程练习
- PAT 1012 数字分类 (20)
- [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
- CGAL4.4+VC2008编译
- centos 6.7 mysql 5.6_CentOS 6.7 安装 MySQL 5.6 思路整理