您的位置:首页 > 编程语言 > Java开发

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()来为参数赋值

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: