准备好的语句是语句的一个稍微更强大的版本,并且应该始终与语句一样快速和容易处理。
准备好的报表可以参数化。
大多数关系数据库分四个步骤处理JDBC / SQL查询:
对于发送到数据库的每个SQL查询,一条语句将始终执行上述四个步骤。准备好的语句预执行上述执行过程中的步骤(1) - (3)。因此,在创建准备好的语句时,会立即执行一些预优化。其效果是在执行时减少数据库引擎的负载。
现在我的问题是:
“使用预先准备的声明还有其他好处吗?”
发布于 2010-07-17 21:37:07
PreparedStatement的优势
PreparedStatement setXxx()方法来设置值。
preparedStatement =connection.prepareStatement(“插入个人(姓名、电子邮件、生日、照片)值(?、?)");preparedStatement.setString(1,person.getName();preparedStatement.setString(2,person.getEmail());preparedStatement.setTimestamp(3,新时间戳(person.getBirthdate().getTime();preparedStatement.setBinaryStream(4,person.getPhoto();preparedStatement.executeUpdate();
因此,不通过字符串连接来内联字符串中的值。
preparedStatement =connection.prepareStatement(“插入Person (姓名、电子邮件)值”('“+ person.getName() +”“,”+ person.getEmail() +“);preparedStatement.executeUpdate();Date、Time、Timestamp、BigDecimal、InputStream (Blob)和Reader (Clob)。在大多数这些类型中,您不能像在简单的toString()中那样“只做”一个Statement。您甚至可以将其重构为在循环中使用PreparedStatement#setObject(),如下面的实用程序方法所示:
公共静态setValues(PreparedStatement preparedStatement,Object.)抛出SQLException { for (int i= 0;i< values.length;i++) { preparedStatement.setObject(i + 1,value);}
如下所示:
preparedStatement =connection.prepareStatement(“插入个人(姓名、电子邮件、生日、照片)值(?,?)");setValues(preparedStatement,person.getName(),person.getEmail(),新时间戳(person.getBirthdate().getTime(),person.getPhoto());preparedStatement.executeUpdate();发布于 2012-11-06 05:46:13
发布于 2010-07-17 12:05:09
PreparedStatement是预防SQL注入攻击的一个很好的防御(但不是万无一失)。绑定参数值是防止“小波比桌”进行不必要访问的好方法。
https://stackoverflow.com/questions/3271249
复制相似问题