JDBC中PreparedStatement接口的使用

  在《java使用JDBC连接MySql数据库》中说明了JDBC链接数据库的基本方式,其中执行SQL语句使用的是Statement接口,这里介绍一个更好用的接口,PreparedStantment接口。

PreparedStatement是什么?

public interface PreparedStatement extends Statement

使用方法:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "insert into person(name,age,description)values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
//设置占位符对应的值,问号是为占位符,有几个问号就代表要插入几个列,这样看来sql代码就比较简洁。
ps.setString(1, p.getName());
ps.setInt(2, p.getAge());
ps.setString(3, p.getDescription());

ps.executeUpdate();

ps.close();
conn.close();

相对于Statement,PreparedStatement的特点是:参数化查询;

优点是什么?

1.提高代码的可读性

SELECT name FROM table1 WHERE age=?
ps.setString(1, "小明");

?:占位符

2.提高性能

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

3.防止SQL注入式攻击

什么是SQL注入?链接

  在使用参数化查询的情况下,数据库系统(eg:MySQL)不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行

参考资料



1.MySQL数据库学习笔记(九)—-JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释): 链接

2.SQL注入攻击 : 链接

3.JDBC为什么要使用PreparedStatement而不是Statement:链接

时间: 2024-10-31 19:00:37

JDBC中PreparedStatement接口的使用的相关文章

MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

[正文] 首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查询结果集. Statement通过以下方法执行一个查询操作: ResultSet executeQuery(String sql) throws SQLException  单词Query就是查询的意思.函数的返回类型是ResultSe

详解Java的JDBC中Statement与PreparedStatement对象_java

一旦获得一个连接,我们可以与数据库进行交互.在JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,使可以发送SQL或PL/SQL命令和从数据库接收数据. 它们还定义方法,帮助Java和数据库使用SQL数据类型之间转换数据的差异. 下表提供了每个接口的用途概要,了解决定使用哪个接口 Statement 对象: 创建Statement对象在可以使用Statement对象执行SQL语句,需要使用Connection对象的cr

加快JDBC中JSP数据库的访问速度

JSP程序都是模块,并且具有强大的表达-请求(divsentation-request)功能. 建立一个完美的数据库访问是一个具有挑战的过程,而JDBC接口能够很好地完成这一过程. 然而,嵌入于JSP代码中的JDBC代码,与SQL命令嵌入在JDBC一样,可以充分利用JSP的功能,为客户端建立一个整洁而简便的API.为了达到这一目的,我们可以考虑到使用JSP操作来建立数据库接口组件. 完美的JSP设计模式是Model-View-Controller (MVC).传统三层体系为:Model为程序逻辑

浅谈实际开发中数据源在JDBC中的应用

数据|数据源 数据源在JDBC中的应用众所周知,JDBC(Java数据库连接)是Java2企业版的重要组成部分.它是基于SQL层的API.通过把SQL语句嵌入JDBC接口的方法中,用户可以通过Java程序执行几乎所有的数据库操作. JDBC只提供了接口,具体的类的实现要求数据库的设计者完成.通过生成这些接口的实例,即使对于不同的数据库,Java程序也可以正确地执行SQL调用.所以对于程序员来说,不必把注意力放在如何向数据库发送SQL指令,因为程序员需要了解和用到的只是JDBC的接口,只有在极少数

JDBC中操作Blob、Clob等对象

很多网友都不知道JDBC中如何操作Blob.Clob等对象,其实这是不难的!操作这些对象就象操作其它String.int一样.不信!你就看下面的文章.下面的例子会带你首先创建包含Clob.Blob对象的数据库的表,然后写入这些对象,最后再读取并操作这些对象! 一.关于Derby www.open-open.com是这样介绍Derby的"Apache Derby 是一种高质量的.纯 Java 的嵌入式关系数据库引擎,IBM 最近已将其捐献给开放源码社区.Derby 数据库基于文件系统,具有高度的可

【转载】JDBC中Connection解惑

本文转载自http://shift-alt-ctrl.iteye.com/blog/1967020   关于JDBC中关于Connection的两个疑问:   1.Connection实例是线程安全的吗?     即一个connection实例,在多线程环境中是否可以确保数据操作是安全的? Java代码   private static Connection connection;       上述代码,设计会不会有问题? 一个Connection实例,即对应底层一个TCP链接,有些开发者可能考

JDBC中SQLData是如何实现的?最好提供一个范例

问题描述 JDBC中SQLData是如何实现的?最好提供一个范例 当我们创建自定义类型,并映射到mysql数据库时,如何建立该类型和sql类型的映射? 用户自定义的数据类型通过setObject()方法映射到SQL类型时,需要实现SQLData接口? 最好提供一个完整范例 解决方案 补充一下,连接方式是JDBC,数据库是mysql,知道使用hibernate或者mybatis可以直接映射, 但是目前在学习jdbc,希望了解的指点一下 解决方案二: 网友提供的hibernate 的一个范例 解决方

关于jdbc中插入和更新的问题

问题描述 关于jdbc中插入和更新的问题 我用的oracle用jdbc进行相关操作,可是,只有插入语句能执行,不能执行更新和删除语句,这是怎么回事呢? 解决方案 不能执行更新和删除语句,检查下代码有问题吗?运行时有没有异常信息呢?如果你用的是纯JDBC操作的话,问题就可能出在代码上,把代码的异常分支打印堆栈日子,检查更新删除操作有没有提交事务.事出必有因,仔细找找呗. 解决方案二: 那就是你的sq语句,出现问题了,和JDBC没有关系,既然你保存能进去,那就证明数据库连接成功,在好好检查一下. 解

jdbctemmple-在PLSQL中执行没问题,在JDBC中查询报列名无效

问题描述 在PLSQL中执行没问题,在JDBC中查询报列名无效 大家帮忙看看,这段SQL有什么问题,我在PLSQL中执行没问题,但是用JDBC查的时候就报列名无效的错误. select * from (select T_c_p_i.HOUSEHOLD_ID, T_c_p_i.HOUSEHOLD_HEAD_RELATIONSHIP, T_P_H_A.attribute_meaning as attribute_meaning, T_c_p_i.PERSON_NAME, T_c_p_i.GENDER