关于JDBC预处理功能PreparedStatement

1、PreparedStatement的定义

PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。如下:

Connection conn = DBConnection.getConnection(); //获得连接对象
String findByIDSQL = "select * from " +
"tb_employee where employeeID = ?"; //SQL语句
PreparedStatement pstmt = null; //声明预处理对象
ResultSet rs = null;
Employee employee = null;
try {
pstmt = conn.prepareStatement(findByIDSQL); //获得预处理对象并赋值
pstmt.setInt(1, employeeID); //设置参数
rs = pstmt.executeQuery(); //执行查询

…………

…………

2、预处理的优势

  • PreparedStatement可以写动态参数化的查询
    用PreparedStatement你可以写带参数的sql查询语句,通过使用相同的sql语句和不同的参数值来做查询比创建一个不同的查询语句要好,下面是一个参数化查询:
    1
    SELECT interest_rate FROM loan WHERE loan_type=?

    现在你可以使用任何一种loan类型如:”personal loan”,”home loan” 或者”gold loan”来查询,这个例子叫做参数化查询,因为它可以用不同的参数调用它,这里的”?”就是参数的占位符。

  • PreparedStatementStatement 更快
    使用 PreparedStatement 最重要的一点好处是它拥有更佳的性能优势,SQL语句会预编译在数据库系统中。执行计划同样会被缓存起来,它允许数据库做参数化查询。使用预处理语句比普通的查询更快,因为它做的工作更少(数据库对SQL语句的分析,编译,优化已经在第一次查询前完成了)。为了减少数据库的负载,生产环境中德JDBC代码你应该总是使用PreparedStatement 。值得注意的一点是:为了获得性能上的优势,应该使用参数化sql查询而不是字符串追加的方式。

总结:这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。

例如学生表里有"学号"和"姓名"两个字段,(学号是是number(9),姓名是varchar2(20).Oracle数据库)
sql="insert into student values(?,?)";
PreparedStatement ps=conn.prepareStatement(sql);   //conn是Connection
ps.setInt(1,202060510);      //"1"对应第一个"?","2"对应第二个"?"
ps.setString(2,"fannge");
ps.executeUpdate();

时间: 2024-10-12 14:04:23

关于JDBC预处理功能PreparedStatement的相关文章

PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本语句(以MySQL数据库为例,因为电脑没有其他的数据库) (1)造PDO对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); 格式: $dsn

JDBC中的PreparedStatement

PreparedStatement类从Statement中继承来. 可以将SQL语句传给数据库做编译处理,即在执行的SQL语句中包含一个或多个IN参数,可以设置IN参数值多次执行SQL语句,不必重新给出SQL语句,提高了执行SQL语句的效率 import com.mysql.jdbc.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import

【JDBC】java PreparedStatement操作oracle数据库

************************************************************************ ****原文:blog.csdn.net/clark_xu  徐长亮的专栏 ************************************************************************ import java.sql.Connection; import java.sql.ResultSet; import java

JDBC进阶之PreparedStatement执行SQL语句(MySQL)

一.什么是PreparedStatement 参阅Java API文档,我们可以知道,PreparedStatement是Statement的子接口(如图所示),表示预编译的 SQL 语句的对象,SQL 语句被预编译并存储在PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 二.通过PreparedStatement获取在运行命令行中执行的参数,将参数插入到某张数据表中 相关的实验过程,包括在预先创建程序所需数据库.创建所需数据表格.在开发环境中加载驱动程序包等

C语言预处理功能 关于字符串化和符号粘贴

在C语言开发中,宏定义是一个非常有用的工具,它可以使我们的代码更容易理解,更容易维护.如查一个常量在多处被使用,且今后可能会根据不同需要而 修改的话,将其define一下那是再好不过了.除此之外,宏定义还有其他的功能,了解它,将更好地辅助我们开发C程序.先看个例子: #define Conn(x,y) x##y #define ToString(x) #x #define ToChar(x) #@x 这几个宏定义中分别用到了"##"."#","#@&quo

JDBC之Statement,PreparedStatement,CallableStatement的区别

Statement. PreparedStatement .CallableStatement 区别和联系 1. Statement.PreparedStatement和CallableStatement都是接口(interface). 2. Statement继承自Wrapper.PreparedStatement继承自Statement.CallableStatement继承自PreparedStatement. 3. Statement接口提供了执行语句和获取结果的基本方法:     Pr

JDBC使用数据库来完成分页功能

本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实现,而这里我们采用的是操作数据库的方式,而且在这种方式中,最重要的是带限制条件的查询SQL语句: select name from user limit m,n 其中m与n为数字.n代表需要获取多少行的数据项,而m代表从哪开始(以0为起始),例如我们想从user表中先获取前五行数据项(1-5)的na

【Java编程】JDBC注入攻击-Statement 与 PreparedStatement

在上一篇[Java编程]建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement我们介绍了如何使用JDBC驱动建立一个简单的连接,并实现使用Statement和PreparedStatement进行数据库查询,本篇blog将接着上篇blog通过SQL注入攻击比较Statement和PreparedStatement.当然这两者还有很多其他方面的不同,在之后的blog中会继续更新. [Statement查询] 1.在DBH

JDBC剖析篇(2):JDBC之PreparedStatement

一次有人问我为什么要使用JDBC中的PreparedStatement,我想了想,说可以“防止SQL注入”,其他的却不能说出个一二三,现在来看看其中的秘密 未完待续 参考文章: http://www.jb51.net/article/40138.htm