准备好的语句如何与 Apache DBUtils 一起使用?
似乎 org.apache.commons.dbutils.* 的大多数方法都需要字符串参数。令人惊讶的是,没有一种方法可以接受 PreparedStatements。
准备好的语句如何与 Apache DBUtils 一起使用?
似乎 org.apache.commons.dbutils.* 的大多数方法都需要字符串参数。令人惊讶的是,没有一种方法可以接受 PreparedStatements。
Prepared Statements 在 DbUtils 内部使用,但是,prepared statement 的重点不是每次更新时都准备一个语句,而是重用它,只更改参数。假设您必须插入 1000 条记录,您想重用相同的准备好的语句,只更改参数。为此,请使用 QueryRunner.batch 而不是 QueryRunner.update。
从示例页面
// 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) {
...
结论? PreparedStatement
s正在使用,完全不用担心。