我正在编写spring框架,下面是执行和获取结果的SQL查询。
String sql = "SELECT DESCRIPTION FROM ATWData WHERE SNO = '980098' ";在spring框架中,我们有RowMapper和ResultsetExtractor回调接口,其中一个最适合用于执行上述SQL查询并获取单个记录。下面的代码使用RowMapper和ResultSetExtractor获得结果。
使用:ResultSetExtractor:的代码
try
{
description = jdbcTemplate.query(sql,
new ResultSetExtractor<String>()
{
public String extractData(final ResultSet rs) throws SQLException
{
if (rs.next())
{
String description = null;
description = rs.getString("DESCRIPTION");
return description;
}
return null;
}
});
}
catch (final DataAccessException e)
{
LOG.error("Error " + e);
}代码下面的使用RowMapper来获得结果:
try
{
description = jdbcTemplate2.query(sql,
new RowMapper<String>()
{
public String mapRow(final ResultSet rs, final int rowNum) throws SQLException
{
String description = (String)rs.getString("DESCRIPTION"));
return description;
}
});
}
catch (final DataAccessException e)
{
LOG.error("Error " + e);
}我已经阅读了关于这些方法的文档,但是在我现有的场景中选择一个方法有些困惑。请建议哪个代码(RowMapper/ResultSetExtractor)最适合执行上面给出的简单SQL查询。
发布于 2016-09-25 20:26:35
在你的情况下,两者都可以。RowMappers旨在将结果集中的一行转换为应用程序中的模型。ResultSetExtractor稍微通用一些,它允许您对整个ResultSet进行操作,而不仅仅是在一行上操作。这仅仅取决于你需要对结果做些什么。在提取单个字符串的情况下,它们都可以工作。有关更多信息,请参见这个问题。你的问题可能被标记为复本。
发布于 2016-09-25 21:02:57
也不要用。
但首先,也是更重要的是:
DataAccessException,继续执行,就好像一切都很好一样。需要让调用方知道查询失败,并且很可能希望回滚任何挂起的事务。由于您的查询是带有参数的单行/单列查询,所以请使用queryForObject(String sql, Class requiredType, Object... args)。
这就是你应该做的:
String sno = "980098";
String sql = "SELECT DESCRIPTION FROM ATWData WHERE SNO = ?";
String description = jdbcTemplate2.queryForObject(sql, String.class, sno);如果找不到行,它将抛出EmptyResultDataAccessException。如果缺少的行不被视为错误,则捕获异常并返回null (或Optional.empty())。
https://stackoverflow.com/questions/39691459
复制相似问题