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的更多相关文章

  1. java基础(11) -JDBC

    java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...

  2. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  3. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  4. Java基础-面向接口编程-JDBC详解

    Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...

  5. Java基础教程:JDBC编程

    Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...

  6. 一份最贴近真实面试的Java基础面试题

    这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...

  7. 28道java基础面试题-下

    28道java基础面试题下 15.Java语言如何进行异常处理,关键字:throws.throw.try.catch.finally分别如何使用? 答:Java通过面向对象的方法进行异常处理,把各种不 ...

  8. Java基础部分 2

    一. Java基础部分 2 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2 2.Java有没有goto? 2 3.说说&和&&am ...

  9. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

随机推荐

  1. 【SQL】全关系操作

    1.消除重复 - DISTINCT SQL语句中默认的是,重复的元祖可以多次的显示.如果希望消除重复,需要DISTINCT关键字. 注:消除重复需要排序,所以代价高.在需要高效率时要谨慎. SELEC ...

  2. docker从零开始(三)服务初体验docker compose

    决条件 安装Docker 1.13或更高版本. 获取Docker Compose.在适用于Mac的Docker和适用于Windows的Docker上,它已预先安装,因此您可以随意使用.在Linux系统 ...

  3. 第一篇:Hello World

    Hello World RabbitMQ是一个消息代理:它接受和转发消息.你可以把它想象成一个邮局:当你把邮件放在邮箱里时,你可以确定邮差先生最终会把邮件发送给你的收件人.在这个比喻中,RabbitM ...

  4. js实现侧边栏信息展示效果

    目前的网页都右侧边栏,有的是在左侧,类似于导航栏,如一些购物商城,还有一些是在网页的右下角,一般是提示客服信息和微信/QQ等服务. 这里都涉及到一个动画效果的展示,即点击侧边栏时会在侧边栏的右侧或者左 ...

  5. hdu5076

    好题,首先观察可得w[i][j]选择只有可能两种,一种比阀值大,一种比阀值小 比阀值大就一定选满足条件最大的w,比阀值小同样一定选满足条件最大的w 那么一个最小割模型就呼之欲出了,注意w可能是负数那么 ...

  6. ubuntu下配置ProFtpd服务使用sqlite3作为后端用户认证

    个人机器需要开个文件共享,Linux机器懒得配置SMB,就直接安装了ProFtpd,以做FTP服务器 Ubuntu安装挺简单,可使用就不那么友好了,配合GAdmin-Proftpd,一样不好用. 首先 ...

  7. [centos6.5] 完全卸载httpd mysql php

    rpm -qa|grep mysql # 列出所有mysql相关包 rpm -e 包名 # 逐一卸载,一个方便技巧是:卸载时可以不带版本,比如 # mysqlclient10-3.23.58-4.RH ...

  8. Codeforces 810 C. Do you want a date?

    C. Do you want a date? time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. CF 990B. Micro-World【数组操作/贪心/STL/二分搜索】

    [链接]:CF [题意]:对任意一个数a[i] ,可以对任意 满足 i != j 且 a[i] > a[j] && a[i] <= a[j] +k 的 a[j] 可以被删掉 ...

  10. CSU 1337 搞笑版费马大定理【优化枚举】

    费马大定理:当n>2时,不定方程an+bn=cn没有正整数解.比如a3+b3=c3没有正整数解.为了活跃气氛,我们不妨来个搞笑版:把方程改成a3+b3=c3,这样就有解了,比如a=4, b=9, ...