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:链接

上一篇:ABAP 7.40新的关键字BASE的用法


下一篇:日期格式化