1

准备好的语句如何与 Apache DBUtils 一起使用?

似乎 org.apache.commons.dbutils.* 的大多数方法都需要字符串参数。令人惊讶的是,没有一种方法可以接受 PreparedStatements。

4

2 回答 2

5

Prepared Statements 在 DbUtils 内部使用,但是,prepared statement 的重点不是每次更新时都准备一个语句,而是重用它,只更改参数。假设您必须插入 1000 条记录,您想重用相同的准备好的语句,只更改参数。为此,请使用 QueryRunner.batch 而不是 QueryRunner.update。

于 2014-01-19T04:32:07.687 回答
2

示例页面

// Execute the query and get the results back from the handler
Object[] result = run.query(
    "SELECT * FROM Person WHERE name=?", h, "John Doe");

这表明必须使用 PreparedStatement。在我们看到的查询方法的源代码中

private <T> T query(Connection conn, boolean closeConn, String sql, 
                     ResultSetHandler<T> rsh, Object... params)
...
PreparedStatement stmt = null;
ResultSet rs = null;
T result = null;

try {
    stmt = this.prepareStatement(conn, sql);
    this.fillStatement(stmt, params);
    rs = this.wrap(stmt.executeQuery());
    result = rsh.handle(rs);
} catch (SQLException e) {
...

结论? PreparedStatements正在使用,完全不用担心。

于 2013-04-10T13:11:16.403 回答