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]);
- }
- }
转载于:https://blog.51cto.com/cnn237111/1131869
本文详细介绍了PreparedStatement接口的优势,包括如何提高数据库查询效率及预防SQL注入***。此外还提供了实用的代码示例,展示了如何使用PreparedStatement进行参数化的SQL操作。
1591

被折叠的 条评论
为什么被折叠?



