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)执行效率非常快,存储过程是数据库的服 ...
随机推荐
- JSP 基础之 JSTL <c:choose>用法 if else
<c:choose> <c:when test="${condition1}"> condition1为true </c:when> <c ...
- Solidity番外篇(一)Solidity在线or插件使用
在学习以太坊合约的过程中会需要自己编写智能合约,官方提供了几种方式供大家使用.下面分别简单介绍一下,如果有错误的地方,还留言指正补充. DAPP IDE 说实话,这个版本IDE我还没有使用过,只提供一 ...
- window10下部署flask系统(apache和wsgi)
公司有一个小系统,通过url和其他系统进行数据交互(有点土). 因此,利用flask写了一个小程序. 现在,考虑到并发问题(flask自身是不会并发的),准备部署在apache+wsgi环境. 网上百 ...
- 构建maven动态web 工程
项目构建 总体参考: http://www.java2blog.com/2015/09/how-to-create-dynamic-web-project-using.html https://sta ...
- laravel获取checkbox值的小技巧
以前老是用三元运算符来判断,现在有了更好的方法: 1.html代码 <input type="hidden" name="approved" value= ...
- Spring:面向切片编程
在之前我们记录Spring的随笔当中,都是记录的Spring如何对对象进行注入,如何对对象的属性值进行注入,即我们讲解的很大部分都是Spring的其中一个核心概念——依赖注入(或者说是控制翻转,IOC ...
- linux 批量替换所有文件中包含的字符串
sed -i "s/原来字符串/新字符串/g" `grep 原来字符串 -rl .` 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 ...
- HDU 1532.Drainage Ditches-网络流最大流
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- (2)C# 创建ef oracle
1.NUGet下载 2.下载 Oracle Developer Tools for Visual Studio https://www.oracle.com/technetwork/develope ...
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...