为了账号安全,请及时绑定邮箱和手机立即绑定

陈述与预备陈述的区别

陈述与预备陈述的区别

当年话下 2019-06-19 10:35:44
陈述与预备陈述的区别准备好的语句是语句的一个稍微更强大的版本,并且应该始终与语句一样快速和容易处理。准备好的报表可能是参数化的。大多数关系数据库分四个步骤处理JDBC/SQL查询:解析传入的SQL查询编译SQL查询计划/优化数据采集路径执行优化的查询/获取和返回数据对于发送到数据库的每个SQL查询,一条语句将始终执行上述四个步骤。准备好的语句预执行上述执行过程中的步骤(1)-(3)。因此,在创建准备好的语句时,会立即执行一些预优化。其效果是在执行时减少数据库引擎的负载。现在我的问题是-“使用预先准备的陈述还有其他好处吗?”
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

a的优点PreparedStatement:

  • 预编译和sql语句的DB端缓存将导致总体上更快的执行和重用批次.

  • 自动预防SQL注入 攻击通过内置转义引号和其他特殊字符。请注意,这要求您使用任何PreparedStatement 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();

    因此通过字符串连接将SQL字符串中的值内联。

    preparedStatement = connection.prepareStatement("INSERT INTO Person (name, email) 
    VALUES ('" + person.getName() + "', '" + person.getEmail() + "'");preparedStatement.executeUpdate();
  • 简化了SQL字符串中非标准Java对象的设置。DateTimeTimestampBigDecimalInputStream (Blob)和Reader (Clob)。在大多数这些类型中,您不能“只做”一个toString()就像你在一个简单的Statement..您甚至可以将其全部重构为PreparedStatement#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]);
        }}

    如下所示:

    preparedStatement = connection.prepareStatement("INSERT INTO Person (name, email, birthdate, photo) 
    VALUES (?, ?, ?, ?)");setValues(preparedStatement, person.getName(), person.getEmail(), 
    new Timestamp(person.getBirthdate().getTime()), person.getPhoto());preparedStatement.executeUpdate();


查看完整回答
反对 回复 2019-06-19
?
隔江千里

TA贡献1906条经验 获得超10个赞

PreparedStatement是一种很好的防御(但不是万无一失)。SQL注入攻击..绑定参数值是防范“小波比桌”进行一次不受欢迎的访问。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 418 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信