Statement与PreparedStatement的关系和区别:

关系:PreparedStatement继承自Statement,都是接口。

区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高   。

   创建Statement是不需要传参的,而创建PreparedStatement是需要传入sql语句作为参数的。(原因:因为PreparedStatement是预编译的,所以在创建PreparedStatement的时候,将sql语句传入PreparedStatement的构造方法,而这个带有参数的构造方法内部,就是处理预编译的代码,作为预编译。而Statement是没有预编译的,只能在执行的时候,具体传入sql语句。)


在JDBC应用中,如果你已经是一个稍有水平的开发者,就应该学会熟练使用以PreparedStatement代替Statement,也就是说,在任何时候都尽量滴不要去使用Statement。

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

Statement为一条Sql语句生成执行计划, 如果要执行两条sql语句

select colume from table where colume=1;select colume from table where colume=2;

会生成两个执行计划 一千个查询就生成一千个执行计划!

PreparedStatement用于使用绑定变量重用执行计划 select colume from table where colume=:x;

通过set不同数据只需要生成一次执行计划,可以重用。

PreparedStatement的使用:

 String sql = "select distinct loan_type from loan where bank=?";
PreparedStatement preStatement = conn.prepareStatement(sql);
preStatement.setString(1, "Citibank");
ResultSet result = preStatement.executeQuery();

Statement的使用:

 String sql = "select * from users where username='" + username + "' AND " + "password='" + password + "'";
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);

使用PreparedStatement的好处:

1.提高可读性和可维护行

2.最大程度的提高性能。PreparedStatement的第一次执行消耗是很高的,它的性能体现在后面的重复执行(缓存的作用),例如假设对表中的某一个或某几条数据进行针对查询,JDBC驱动会发送一个网络请求到数据解析和优化这个查询,而执行时会产生另一个网络请求。

3.防止SQL注入(PS:SQL注入产生的原因很简单,就是访问的用户通过前端对网站可以输入参数的地方进行提交参数,参数里注入了一些恶意参数传入到服务器后端中,服务器后端没有对其进行详细的安全过滤,导致传入的参数直接传到数据库中,执行了数据库的SQL语句,SQL语句是可以查询网站的管理员账号、密码、以及一些其他信息等等的敏感数据,这就是SQL的注入式攻击。

好久没贴图了,给大伙来一个

Statement和PreparedStatement的更多相关文章

  1. JDBC中的Statement和PreparedStatement的区别

    JDBC中的Statement和PreparedStatement的区别  

  2. 说说Statement、PreparedStatement和CallableStatement的异同(转)

    1.Statement.PreparedStatement和CallableStatement都是接口(interface). 2.Statement继承自Wrapper.PreparedStatem ...

  3. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  4. 理解 Statement 和 PreparedStatement

    java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以Prepar ...

  5. statement和preparedstatement用法区别

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

  6. Statement,PreparedStatement和CallableStatement的联系和区别

    联系: CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement. 区别: 1:Statement 每次执行sql语句,数据 ...

  7. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  8. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  9. JDBC中的Statement和PreparedStatement的差别

    以Oracle为例吧 Statement为一条Sql语句生成运行计划, 假设要运行两条sql语句 select colume from table where colume=1; select col ...

  10. 执行对象Statement、PreparedStatement和CallableStatement详解 JDBC简介(五)

    执行对象是SQL的执行者,SQL是“安排好的任务”,执行对象就是“实际工作的人”. 执行对象有三种: Statement.PreparedStatement和CallableStatement,他们都 ...

随机推荐

  1. 热度3年猛增20倍,Serverless&云开发的技术架构全解析

    『 作为一个不断发展的新兴技术, Serverless 热度的制高点已然到来.』 或许,Google Trends 所显示的 3 年猛增 20 倍的" Serverless " 搜 ...

  2. c++学习书籍推荐《数据结构C++语言描述:应用标准模板库STL(第2版)》下载

    本书是Ford和Topp两位教授于1996看出版的名著Data Structures with C++的第2版,在全球范围内已经有数以万计的学生从中受益.作者将C++语言作为算法描述语言,应用包含规范 ...

  3. 【Aizu - 0525】Osenbei (dfs)

    -->Osenbei 直接写中文了 Descriptions: 给出n行m列的0.1矩阵,每次操作可以将任意一行或一列反转,即这一行或一列中0变为1,1变为0.问通过任意多次这样的变换,最多可以 ...

  4. 移动app商城UI模板(仿淘宝)

    该商城UI模板是仿照手机淘宝,实现了搜索商品-查看商品详情-加入购物车-结算的流程,共7个页面,由于没有数据库,所有页面上的数据都来自tempData.cs及tempPro.cs ,具体页面参考如下 ...

  5. 详细记录登录过程的用户、IP地址、shell命令以及详细操作时间

    将下面的代码添加到/etc/profile #history USER_IP=`>/dev/null|awk '{print $NF}'|sed -e 's/[()]//g'` HISTDIR= ...

  6. [NOIP2003] 传染病控制题解

    问题 F: [NOIP2003] 传染病控制 时间限制: 1 Sec  内存限制: 128 MB 题目描述 [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范 ...

  7. [ERROR]:INST-07008: Oracle 主目录(O) 位置的验证失败。用户没有创建主目录/实例位置的权限

    安装weblogic12.1.3.0时,输入的安装命令是: 老是报这个错误. 百度半天好像没人报过这错……看来只有我这么粗心了…… 后来发现wls.rsp里面的Oracle_HOME指向目录错误,修改 ...

  8. 鸟哥的Linux私房菜笔记第六章(二)

    文件内容查询 直接查询文件内容 查阅一个文件的内容可以使用指令cat/tac/nl. # [cat|tac|nl] 文件 区别: 1.cat是直接把文件内容输出到屏幕上,并且从第一行开始输出到末行 2 ...

  9. docker学习笔记-简介

    零.什么是Docker 是一个基于GO语言开发的开源 应用容器: 开发者可以打包应用和相关包,到一个 轻量级 . 可移植 的 容器 中,并且可以发布到 任何机器 ,实现 虚拟化: 完全使用 沙箱机制, ...

  10. 洛谷 P1101-题解

    这道题可以用深搜(回溯)来写,相信大部分人都是这么想的,但是有些人可能在一些地方饶了半天,所以这里就贴一下我的思路,个人觉得自己的很好懂,除了tx和ty那里,但是tx和ty的那种用法对于输出路径的题目 ...