Java笔记:Statement和PreparedStatement的区别
2013-02-04 19:55
519 查看
PreparedStatement 接口继承了Statement,因此PreparedStatement比Statement功能更强大,有人主张,在JDBC应用中,应该始终以PreparedStatement代替Statement。也就是说,在任何时候都不要使用Statement。
大部分关系型数据库通过JDBC进行SQL查询,分以下4步。
1.转换SQL。
2.编译SQL。
3.优化数据查询路径。
4.执行最优化的查寻,并返回数据。
Statement对于每一个SQL查询总是处理这4步。而PreparedStatement对象已经预先执行了步骤1-3,这样的话,当PreparedStatement只需要做查询动作,因此比Statement会快很多。并且PreparedStatement能够防止sql注入攻击,可以使用?作为参数,然后调用方法setXxx()来为参数赋值
对于一些非字符串的值,比如Date, Time, Timestamp, BigDecimal, InputStream (Blob) 等值,也可以在循环内调用setObject方法来设置值。如下:
本文出自 “一只博客” 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/1131869
大部分关系型数据库通过JDBC进行SQL查询,分以下4步。
1.转换SQL。
2.编译SQL。
3.优化数据查询路径。
4.执行最优化的查寻,并返回数据。
Statement对于每一个SQL查询总是处理这4步。而PreparedStatement对象已经预先执行了步骤1-3,这样的话,当PreparedStatement只需要做查询动作,因此比Statement会快很多。并且PreparedStatement能够防止sql注入攻击,可以使用?作为参数,然后调用方法setXxx()来为参数赋值
preparedStatement = connection.prepareStatement("INSERT INTO Person (name, email, birthdate, photo) VALUES (?, ?, ?, ?)"); preparedStatement.setString(1, person.getName()); preparedStatement.setString(2, person.getEmail()); preparedStatement.setTimestamp(3, new Timestamp(person.getBirthdate().getTime())); preparedStatement.setBinaryStream(4, person.getPhoto()); preparedStatement.executeUpdate();
对于一些非字符串的值,比如Date, Time, Timestamp, BigDecimal, InputStream (Blob) 等值,也可以在循环内调用setObject方法来设置值。如下:
public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException { for (int i = 0; i < values.length; i++) { preparedStatement.setObject(i + 1, values[i]); } }
本文出自 “一只博客” 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/1131869
相关文章推荐
- Java_jdbc 基础笔记之三 数据库连接 (Statement)
- Java对数据库操作中,PrepareStatement的Statement的区别
- Java中PreparedStatement和Statement的用法区别
- 黑马程序员—Java基础学习笔记之(throws与throw的区别)
- java之yield(),sleep(),wait()区别详解-备忘笔记
- Java基础知识强化之IO流笔记04:throw和throws的区别
- java中PreparedStatement和Statement的区别
- 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库
- Java Puzzlers笔记--puzzle 12: ABC String与char的区别
- JAVA "Public", "Protected", "Private" and "Friendly"的区别--笔记
- java之yield(),sleep(),wait()区别详解-备忘笔记
- Java中PreparedStatement和Statement的用法区别
- objective-c学习笔记第五章《objective-c 继承与java中的区别》
- objective-c学习笔记第七章《objective-c 数据类型和变量与java中的区别》
- Java中PreparedStatement和Statement的用法区别
- java中prepareStatement与createStatement的区别
- java笔记之Runnable和Thread的区别
- Java学习笔记--Collection和Collections的区别
- 【Java学习笔记 】print、printf、println的区别
- Java学习笔记—equals()和==的区别