我有三个查询
SELECT NAME FROM EMP WHERE EMPID=100; // THIS RETURNS A STRING
SELECT DEPTID FROM EMP WHERE EMPID=100; // THIS RETURNS AN INT
SELECT EMPID FROM DEPT WHERE DEPTID=101; // THIS RETURNS A LIST
现在我正在尝试编写通用代码以返回对象,但是我只能发送一种类型,即高级对象列表。是否可以根据类型发送结果?
这是我的代码
public Object getObjectFromDB(final String query, final Map<Object, Object> inputMap, JdbcTemplate jdbcTemplate, final Object returnType) throws Exception {
final List<Object> obj = new ArrayList<Object>();
try {
jdbcTemplate.query(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement(query);
}
}, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
}
}, new ResultSetExtractor<Object>() {
@Override
public Object extractData(ResultSet rs) throws SQLException,DataAccessException {
while(rs.next()) {
if(returnType instanceof Integer) {
obj.add(rs.getInt(1));
break;
} else if(returnType instanceof String) {
obj.add(rs.getString(1));
break;
} else if(returnType instanceof List) {
obj.add(rs.getObject(1));
}
}
return obj;
}
});
} catch (Exception e) {
LOG.error(e);
}
return obj;
}
即使我想触发第一个查询,它总是返回作为列表对象的obj。任何想法将不胜感激。
答案 0 :(得分:1)
您是否尝试编写泛型方法?有关更多信息,请参见Generic Methods。如果您已经知道传递给方法的任何特定参数集所期望的返回类型,则可以轻松进行此操作。
此post描述了如何编写具有通用返回类型的方法。
一种可能的功能原型可以是:
public static <T> List<T> getObjectFromDB(final String query, final Map<Object, Object> inputMap, JdbcTemplate jdbcTemplate, T returnType){
}
答案 1 :(得分:0)
在您在此处声明时,它将始终返回List<Object>
final List<Object> obj = new ArrayList<Object>();
尝试检查obj的第一个元素(因为它是一个列表)及其类型。