简而言之,问题是我第一次调用 JdbcTemplate 并查询数据库时结果集为空。
当我第二次访问 DAO 方法时,我得到了预期的结果。以下是有关如何设置类的更多信息:
我有一个扩展父数据访问对象的数据访问对象。父 dao 类只是将数据源注入到 JdbcTemplate 的构造函数中:
public class BaseDao
{
private JdbcTemplate usrJdbcTemplate;
public void setUsrDataSource(DataSource usrDataSource)
{
this.usrJdbcTemplate = new JdbcTemplate(usrDataSource);
}
public JdbcTemplate getUsrJdbcTemplate()
{
return this.usrJdbcTemplate;
}
}
扩展它的类使用这个 JdbcTemplate 来查询一个表:
public class OimUserDao extends BaseDao
{
public Date getPasswordExpiryDate(String userName)
{
String sql = "select USR_PWD_EXPIRE_DATE from USR where UPPER (USR_LOGIN) = ?";
List<java.sql.Date> dtLst = getUsrJdbcTemplate().query(sql, new Object[] {userName.toUpperCase()}, new RowMapper<java.sql.Date>()
{
@Override
public java.sql.Date mapRow(final ResultSet rs, int rowNum) throws SQLException
{
return rs.getDate(1);
}
});
if (dtLst.size()>0)
{
return dtLst.get(0);
}
else
{
return null;
}
}
}
DAO 使用@Autowired 注解在服务中自动装配。xml 中的 DAO 声明:
<bean id="baseDao" class="us.worldpay.portalgateway.dao.BaseDao">
<property name="usrDataSource" ref="usrDataSource" />
</bean>
<bean id="oimUserDao" class="us.worldpay.portalgateway.dao.OimUserDao" parent="baseDao" />
Web.xml 有 xml 的声明,其中包含这些 DAO 的 bean 定义(pg-data 是我们关心的那个):
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/pg-servlet.xml,
/WEB-INF/pg-data.xml
</param-value>
</context-param>
更糟糕的是,这永远不会发生在我的本地机器(Weblogic)上,它指向与我们的 QA 环境相同的数据库(Oracle)。当我在本地机器上运行它时,第一次结果集已填充并包含数据。当我在 QA 环境(Weblogic)上运行它时,结果集第一次是空的。我已经花了几个小时和几个小时,但没有得到任何地方。
我很感谢您花时间阅读这篇文章。我很感激我能得到的所有帮助。