JDBC之PreparedStatement
JDBC之PreparedStatement
一、java.sql.PreparedStatement接口简介
该接口表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

可以通过调用 Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象
PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句
PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXXX() 方法来设置这些参数. setXXX() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值
二、PreapredStatement接口方法介绍
void |
addBatch() 将一组参数添加到此 PreparedStatement 对象的批处理命令中。 |
void |
clearParameters()立即清除当前参数值。 |
boolean |
execute()在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL语句。 |
ResultSet |
executeQuery()在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的ResultSet 对象。 |
int |
executeUpdate()在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL语句,比如 DDL 语句。 |
ResultSetMetaData |
getMetaData()获取包含有关 ResultSet 对象列信息的ResultSetMetaData 对象,ResultSet 对象将在执行此PreparedStatement 对象时返回。 |
ParameterMetaData |
getParameterMetaData()获取此 PreparedStatement 对象的参数的编号、类型和属性。 |
void |
setArray(int parameterIndex,将指定参数设置为给定 java.sql.Array 对象。 |
void |
setAsciiStream(int parameterIndex,将指定参数设置为给定输入流。 |
void |
setAsciiStream(int parameterIndex, 将指定参数设置为给定输入流,该输入流将具有给定字节数。 |
void |
setAsciiStream(int parameterIndex, 将指定参数设置为给定输入流,该输入流将具有指定字节数。 |
void |
setBigDecimal(int parameterIndex,将指定参数设置为给定 java.math.BigDecimal 值。 |
void |
setBinaryStream(int parameterIndex,将指定参数设置为给定输入流。 |
void |
setBinaryStream(int parameterIndex, 将指定参数设置为给定输入流,该输入流将具有给定字节数。 |
void |
setBinaryStream(int parameterIndex, 将指定参数设置为给定输入流,该输入流将具有指定字节数。 |
void |
setBlob(int parameterIndex,将指定参数设置为给定 java.sql.Blob 对象。 |
void |
setBlob(int parameterIndex,将指定参数设置为 InputStream 对象。 |
void |
setBlob(int parameterIndex, 将指定参数设置为 InputStream对象。 |
void |
setBoolean(int parameterIndex, 将指定参数设置为给定 Java boolean值。 |
void |
setByte(int parameterIndex, 将指定参数设置为给定 Java byte 值。 |
void |
setBytes(int parameterIndex, 将指定参数设置为给定 Java byte 数组。 |
void |
setCharacterStream(int parameterIndex,将指定参数设置为给定 Reader 对象。 |
void |
setCharacterStream(int parameterIndex, 将给定参数设置为给定 Reader对象,该对象具有给定字符数长度。 |
void |
setCharacterStream(int parameterIndex, 将指定参数设置为给定 Reader对象,该对象具有给定字符数长度。 |
void |
setClob(int parameterIndex,将指定参数设置为给定 java.sql.Clob 对象。 |
void |
setClob(int parameterIndex,将指定参数设置为 Reader 对象。 |
void |
setClob(int parameterIndex, 将指定参数设置为 Reader 对象。 |
void |
setDate(int parameterIndex,使用运行应用程序的虚拟机的默认时区将指定参数设置为给定 java.sql.Date值。 |
void |
setDate(int parameterIndex,使用给定的 Calendar 对象将指定参数设置为给定java.sql.Date 值。 |
void |
setDouble(int parameterIndex, 将指定参数设置为给定 Java double 值。 |
void |
setFloat(int parameterIndex, 将指定参数设置为给定 Java REAL 值。 |
void |
setInt(int parameterIndex, 将指定参数设置为给定 Java int 值。 |
void |
setLong(int parameterIndex, 将指定参数设置为给定 Java long 值。 |
void |
setNCharacterStream(int parameterIndex,将指定参数设置为 Reader 对象。 |
void |
setNCharacterStream(int parameterIndex, 将指定参数设置为 Reader 对象。 |
void |
setNClob(int parameterIndex, 将指定参数设置为 java.sql.NClob 对象。 |
void |
setNClob(int parameterIndex,将指定参数设置为 Reader 对象。 |
void |
setNClob(int parameterIndex, 将指定参数设置为 Reader 对象。 |
void |
setNString(int parameterIndex,将指定参数设置为给定 String 对象。 |
void |
setNull(int parameterIndex, 将指定参数设置为 SQL NULL。 |
void |
setNull(int parameterIndex,将指定参数设置为 SQL NULL。 |
void |
setObject(int parameterIndex,使用给定对象设置指定参数的值。 |
void |
setObject(int parameterIndex, 使用给定对象设置指定参数的值。 |
void |
setObject(int parameterIndex,使用给定对象设置指定参数的值。 |
void |
setRef(int parameterIndex,将指定参数设置为给定 REF(<structured-type>) 值。 |
void |
setRowId(int parameterIndex,将指定参数设置为给定 java.sql.RowId 对象。 |
void |
setShort(int parameterIndex, 将指定参数设置为给定 Java short 值。 |
void |
setSQLXML(int parameterIndex,将指定参数设置为给定 java.sql.SQLXML 对象。 |
void |
setString(int parameterIndex,将指定参数设置为给定 Java String 值。 |
void |
setTime(int parameterIndex,将指定参数设置为给定 java.sql.Time 值。 |
void |
setTime(int parameterIndex,使用给定的 Calendar 对象将指定参数设置为给定java.sql.Time 值。 |
void |
setTimestamp(int parameterIndex,将指定参数设置为给定 java.sql.Timestamp 值。 |
void |
setTimestamp(int parameterIndex,使用给定的 Calendar 对象将指定参数设置为给定java.sql.Timestamp 值。 |
void |
setUnicodeStream(int parameterIndex, 已过时。 |
void |
setURL(int parameterIndex,将指定参数设置为给定 java.net.URL 值。 |
三、PreparedStatement vs Statement
相比于Statement,PreparedStatement的代码的可读性和可维护性较好.
PreparedStatement 能最大可能提高性能:
①DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
②在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对
普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.
③(语法检查,语义检查,翻译成二进制命令,缓存)
PreparedStatement 可以防止 SQL 注入,SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL 语句段或命令,从而利用系统的 SQL 引擎完成恶意行为的做法对于 Java 而言,要防范 SQL 注入,只要用PreparedStatement 取代 Statement 就可以了
如果,您对我的这篇博文有什么疑问,欢迎评论区留言,大家互相讨论学习。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博文感兴趣,可以关注我的后续博客,我是【AlbertRui】。转载请注明出处和链接地址,欢迎转载,谢谢!
JDBC之PreparedStatement的更多相关文章
- java中使用JDBC的preparedStatement批处理数据的添加
在项目中我们偶尔可能会遇到批量向数据库中导入数据,如果批处理的情况较多的情况下可以使用spring batch,如果只是一个导入功能的话可以考虑使用jdbc的preparedStatement处理. ...
- JDBC连接数据库(PreparedStatement)
PreparedStatement是在数据库端防止SQL注入漏洞的SQL方法这里演示了一些基本使用方法同样使用Oracle数据库,之前已经手动建立了一张t_account表数据库代码参见上一篇< ...
- 转自“脚本之家”!!JDBC之PreparedStatement类中预编译的综合应用解析
JDK 文档:SQL 语句被预编译并存储在 PreparedStatement 对象中(PreparedStatement是存储在JDBC里的,初始化后,缓存到了JDBC里),然后可以使用此对象多次高 ...
- JDBC - Oracle PreparedStatement (GeneratedKey kind) ArrayIndexOutOfBoundsException
问题: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12at oracle.jdbc. ...
- Java学习笔记——JDBC之PreparedStatement类中“预编译”的综合应用
预编译 SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 预编译的优点 1.PreparedStatement是预编译的,对于批量处理 ...
- JDBC 中preparedStatement和Statement区别
一.概念 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.PreparedStatement 和 CallableStatement三种方式 ...
- [疯狂Java]JDBC:PreparedStatement预编译执行SQL语句
1. SQL语句的执行过程——Statement直接执行的弊病: 1) SQL语句和编程语言一样,仅仅就会普通的文本字符串,首先数据库引擎无法识别这种文本字符串,而底层的CPU更不理解这些文本字符串( ...
- 回头探索JDBC及PreparedStatement防SQL注入原理
概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...
- JDBC Statements, PreparedStatement和CallableStatement语句
当获得了与数据库的连接后,就可以与数据库进行交互了. JDBC Statement,CallableStatement和PreparedStatement接口定义了可用于发送SQL或PL/SQL命令, ...
随机推荐
- C# 一句很简单而又很经典的代码
一.知识点 二.问题 如果以上四个问题,你很自信,那么以下,您就不要看了,因为我想说的东西真的很简单. 如果你开始怀疑自己,可以继续向下看.你自己到底真的理解吗??? 再看下面这段代码有没有问题? c ...
- 分布式任务调度平台XXL-JOB学习笔记一
分布式任务调度平台XXL-JOB学习笔记一 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用.码云地址 ...
- 用户体验要素——产品系统设计方法
用户体验已经成为了每个互联网人的口头词,特别是互联网产品经理或产品设计师. 的确,对于任何一个互联网产品而言,体验都是非常重要的. 但是具体的用户体验到底指的是哪些方面,界面,UI,还是交互,其中到底 ...
- vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案
现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...
- 【iOS】获取视图的中心和宽高
示例代码: NSLog(@"%f, %f", self.view.center.x, self.view.center.y); NSLog(@"%f, %f", ...
- win10家庭版打开组策略
新建记事本,输入: @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-G ...
- 网站安装SSL证书成为影响SEO排名的重要因素之一
百度谷歌先后发声明倡导站长们使用https链接,同样的网站,https站点要比http站点拥有更好的排名权重.https已经是网站SEO必须要考虑的环节之一了,而https的必要条件就是安装SSL证书 ...
- 完全零基础在Linux中安装 JDK
完全零基础在Linux中安装 JDK 总体思路:先确定没有Java程序了 — 然后创建相应路径文件夹 — 下载JDK — 解压到当前路径 — 自定义文件名称 — 配置环境变量 — 检查是否安装成功 第 ...
- kafka客户端和服务端开发(三)
前面我们已经搭建了kafka的单机和集群环境,分别写了简单的实例代码,对于代码里面使用到的参数并没有做解释.下面我们来详细说一下各个参数的作用. 1. 创建kafka生产者 kafka生产者有3个必选 ...
- GD32电压不足时烧写程序导致程序运行异常的解决方法
一直使用的GD32F450前段时间遇到这样一个问题,当使用J-Link供电给板子烧写程序之后,程序运行缓慢,就像运行在FLASH高速部分之外一样,但是如果使用外部供电烧写,就不会出现这个问题,而且一旦 ...