Java基础——Statement与PrepareStatement
Statement
Statement是Java运行数据库操作的一个重要方法。用于在已经建立数据库连接的基础上。向数据库发送要运行的SQL语句。Statement对象,用于运行不带參数的简单SQL语句。用于运行静态
SQL 语句并返回它所生成结果的对象。
在默认情况下,同一时间每一个 Statement对象在仅仅能打开一个
ResultSet对象。因此,假设读取一个 ResultSet对象与读取还有一个交叉。则这两个对象必须是由不同的 Statement对象生成的。
假设存在某个语句的打开的当前 ResultSet对象,则
Statement接口中的全部运行方法都会隐式关闭它。
Statement对象用于将 SQL语句发送到数据库中。
实际上有三种
Statement对象,它们都作为在给定连接上运行 SQL语句的包容器:Statement、PreparedStatement(它从
Statement继承而来)和 CallableStatement(它从 PreparedStatement继承而来)。它们都专用于发送特定类型的 SQL语句:Statement对象用于运行不带參数的简单
SQL语句;PreparedStatement对象用于运行带或不带 IN參数的预编译 SQL语句;CallableStatement对象用于运行对数据库已存在的存储过程的调用。
Statement接口提供了运行语句和获取结果的基本方法。
PreparedStatement接口加入了处理
IN參数的方法;而CallableStatement加入了处理 OUT參数的方法。
PrepareStatement
PreparedStatement对象已预编译过,所以其运行速度要快于
Statement对象。因此。多次运行的 SQL语句常常创建为 PreparedStatement对象。以提高效率。
作为 Statement 的子类,PreparedStatement 继承了 Statement 的全部功能。另外它还加入了一整套方法,用于设置发送给数据库以代替 IN 參数占位符的值。
CallableStatement
CallableStatement对象为全部的DBMS 提供了一种以标准形式调用已储存过程的方法。已储 存过程储存在数据库中。对已储存过程的调用是CallableStatement对象所含的内容。
这样的调用是
用一种换码语法来写的,有两种形式:一种形式带结果參,还有一种形式不带结果參数。结果參数是 一种输出(OUT) 參数。是已储存过程的返回值。两种形式都可带有数量可变的输入(IN 參数)、 输出(OUT 參数)或输入和输出(INOUT參数)的參数。问号将用作參数的占位符。
Statement 或 PrepareStatement?
通过读其它人的代码。能够看到用的大部分都是PrepareStatement。PrepareStatement 运行的是预编译语句,预编译语句在被DB的编译器编译后的运行代码被缓存下来。那么下次调用时仅仅要是同样的预编译语句就不用在编译了,对多次插入但数据不同的情况下,使用PrepareStatement能提高非常大的性能。
万条数据耗费时间:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2xpeDFhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
万条数据耗费时间:
安全性是PrepareStatement的非常大的优势,使用PrepareStatement能尽可能提高数据库的安全性。
大家应该都知道sql注入;採用拼串的方式拼的sql语句存在被sql注入的风险。而假设使用预编译语句.则传入的不论什么内容就不会和原来的语句发生不论什么匹配的关系。安全性就有了非常高的提升。
总结
尽管PrepareStatement较Statement有非常多的优点。可是Statement并非一无是处的。假设插入的sql语句不固定。也没有什么规律那么用PrepareStatement在性能上也没有什么优势。存在即有一定的合理性。所以我们应该依据情况选择合适的方式。
Java基础——Statement与PrepareStatement的更多相关文章
- java基础(11) -JDBC
java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- Java基础-面向接口编程-JDBC详解
Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...
- Java基础教程:JDBC编程
Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...
- 一份最贴近真实面试的Java基础面试题
这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...
- 28道java基础面试题-下
28道java基础面试题下 15.Java语言如何进行异常处理,关键字:throws.throw.try.catch.finally分别如何使用? 答:Java通过面向对象的方法进行异常处理,把各种不 ...
- Java基础部分 2
一. Java基础部分 2 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2 2.Java有没有goto? 2 3.说说&和&&am ...
- ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库
1.MySQL存储过程 1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if while)等等 的sql语句 1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...
随机推荐
- lucene 排序
(1)排序对一个文档里什么域都没存储,使用字符串排序会排在首位 (2)排序对一个文档里什么域都没存储,使用数字类型排序会默认给其赋值为0进行排序 (3)我们可以对数字类型的null值的文档进行代码控制 ...
- Python垃圾回收机制:gc模块(zz)
在Python中,为了解决内存泄露问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收. 由于Python 有了自动垃圾回收功能,就造成了不少初学者误认为不必再受内存泄漏的骚扰了.但如果仔细查看一 ...
- python2.7安装Twisted报Microsoft Visual C++9.0 required
环境: 操作系统:Windows 7 32位 语言:Python 2.7.9 Twisted: Twisted 安装,执行如下命令: pip install Twisted 报错如下: error:M ...
- ajax按钮改变数据状态
1.html代码 <td> @if($project->done_deal==) <button type="button" class="btn ...
- 【UOJ UNR #1】火车管理 可持久化线段树
用可持久化线段树维护每个站的第一辆车和每个站的前一次更新的位置即可. #include<iostream> #include<cstring> #include<cstd ...
- shell脚本学习(二)
shell传递参数 shell脚本在执行是可以传递参数,脚本内获取参数的格式为:$n,n为一个数字,1为第一个参数,2为第二个参数,以此类推 其中,$0代表了要执行的文件名 实例: 代码如下: #!/ ...
- 洛谷 P2689 东南西北【模拟/搜索】
题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地.求到达终点的最少时间. 如果无法偏移至终点,输出“-1”. 输入输出格式 输入格式: 第一行 ...
- Ubuntu 安装 tensorflow-gpu + keras
转载请注明: 仰望大牛的小清新:http://www.cnblogs.com/luruiyuan/ 本文原网址:http://www.cnblogs.com/luruiyuan/p/6660142.h ...
- 二维树状数组+差分【p4514】上帝造题的七分钟
Description "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n\times m\)矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为\((a,b)\),右 ...
- 转 IntelliJ IDEA 快捷键
https://www.cnblogs.com/clwydjgs/p/9390488.html 一.视图查看 Ctrl+F12 查看file,method结构图.类继承机构图 (不知道方法结构,Ctr ...