我使用Apache DBUtils运行了一个insert语句。然而,我不确定为什么我必须为这种情况包括ResultSetHandler:
String theQuery = QueryGenerator.insertintoStats();
ResultSetHandler<Object> dummyHandler = new ResultSetHandler<Object>() {
@Override
public Object handle(ResultSet rs) throws SQLException
{
return null;
}
};
try
{
queryRunner.insert(connection, theQuery, dummyHandler, Constants.UUIDSTR.toString(), name, prevbackupTime,
curbackupTime, updStartTime, delStartTime, bkupType.toString(), rowCount);
}
catch (SQLException e)
{
LOGGER.info(theQuery.toString());
LOGGER.error("Caught exception!", e);
}
insertbatch
的情况类似,它确实使用ResultSetHandler。我已使用batch
调用进行批处理查询。有人能解释一下为什么我们需要insert
的结果集处理程序吗?
来自文档https://commons.apache.org/proper/commons-dbutils/apidocs/:
public <T> T insert(String sql,
ResultSetHandler<T> rsh,
Object... params)
throws SQLException
rsh-用于从ResultSet创建结果对象的处理程序的自动生成密钥。
如果在插入时生成id
的表中插入值,则可以将其检索回来,例如,请参阅以下答案:如何手动执行此操作:https://stackoverflow.com/a/1915197/947111
您需要ResultSetHandler<T> rsh
对ResultSet
进行迭代,后者返回已创建的id
。