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. mysql分页查询语法

    一.limit语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指 ...

  2. flask+gunicorn中文文件下载报错问题及解决

    导言 问题源起与一个静态文件下载的接口: from flask import Flask, current_app app = Flask(__name__) @app.route('/file_na ...

  3. 忘记root密码怎么办

    忘记root密码有两种解决办法.一种是emergency模式,另一种是rescue模式. 1.emergency模式 这个模式又有人称为单用户模式.使用这种模式,前提是要知道grub密码.一般适用于对 ...

  4. ros bashrc 无法source setup.sh

    不知道什么时候开始的,莫名其妙首先是QT闪退,无法找到头文件,然后命令行进去catkin无法提示catkin_make 手动source之后就好了 问题出现在bashrc中source失败了 所以检查 ...

  5. (一)安装openvpn服务器端

    环境 centos版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 关闭cento ...

  6. (2)创建发布Maven

    一.创建maven项目 (1)命令行 mvn archetype:generate (2)选择模板默认是7 (3)输入组织号.项目名称及版本号.包名 回车确认 创建成功 二.转成idea项目 进入跟目 ...

  7. 训练指南 UVA - 11478(最短路BellmanFord+ 二分+ 差分约束)

    layout: post title: 训练指南 UVA - 11478(最短路BellmanFord+ 二分+ 差分约束) author: "luowentaoaa" catal ...

  8. uva10256

    uva10256 题意 平面上存在两种颜色的点,问是否存在一条直线,使得任取一个红点和一个蓝点都在直线的异侧,这条直线不经过任何点. 分析 对每种颜色的点求一发凸包,问题等价于判断两个多边形是否相交或 ...

  9. Fruit Feast(暴力)(动态规划)

    Fruit Feast 时间限制: 1 Sec  内存限制: 64 MB提交: 64  解决: 18[提交][状态][讨论版] 题目描述 Bessie has broken into Farmer J ...

  10. java中的3大特性之继承

    继承的特点:继承父类的属性和方法.单继承(多层继承)c++里的继承是多继承 特性 :方法的复写(重写) java中的继承和OC中一样. 比如:人可以养狗; 人---->狗 :整体和部分(拥有)关 ...