gpt4 book ai didi

java - 存储过程的结果集包含 LinkedCaseInsensitiveMap 列表

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:52 25 4
gpt4 key购买 nike

我在 Java 中调用了这个存储过程:

@Autowired
public ScoreDao(DataSource dataSource) {
setDataSource(dataSource);
mScoreStoredProcedure = new ScoreStoredProcedure(dataSource);
}

public List<Score> loadAllScore(String pUsername, String pUUID, int pLimit) {
return mScoreStoredProcedure.execute(pUsername, pUUID, pLimit);
}

private class ScoreStoredProcedure extends StoredProcedure {
private static final String SPROC_NAME = "loadUserScore";

public ScoreStoredProcedure(DataSource datasource) {
super(datasource, SPROC_NAME);
declareParameter(new SqlReturnResultSet("#result-set-2", mScoreMapper));
declareParameter(new SqlParameter("vusername", Types.VARCHAR));
declareParameter(new SqlParameter("vuuid", Types.VARCHAR));
declareParameter(new SqlParameter("vlimit", Types.INTEGER));
compile();
}

@SuppressWarnings("unchecked")
public List<Score> execute(String pUsername, String pUUID, int pLimit){
Map<String,Object> lAllScoreResult = super.execute(pUsername, pUUID, pLimit);
List<Score> lAllScore = ((List<Score>)lAllScoreResult.get("#result-set-2"));
return lAllScore;
}

}

和这个映射器类:

public class ScoreMapper implements RowMapper<Score> {

private String suffix = "";

@Autowired
private ScoreCreator scoreCreator;

@Autowired
private QuestionMapper questionMapper;

public ScoreMapper(String pSuffix) {
suffix = pSuffix;
}

public Score mapRow(ResultSet rs, int rowNum) throws SQLException {
Score lScore = scoreCreator.createScore(rs.getLong(suffix+"id"),
rs.getTimestamp(suffix+"stempel"), rs.getString(suffix+"username"),
rs.getInt(suffix+"points"), rs.getInt(suffix+"level"),
rs.getString(suffix+"comment"),
questionMapper.mapRow(rs, rowNum), rs.getString(suffix+"uuid"));
return lScore;
}
}

我遇到的问题是我的 StoredProcedure 的结果永远不会转换为 List<Score> .

相反,它包含 LinkedCaseInsensitiveMap<V> 的列表.每个条目都包含数据库中的一个值。

映射器通过 Spring 正确连接。

简而言之:我希望结果是 List<Score> .我以为我用代码中显示的方法来处理这个问题。如何将结果直接转换为我的 List<Score>

我遵循了本教程 http://www.jtmelton.com/2007/10/30/using-springs-storedprocedure-and-rowmapper-mechanisms/

你能帮我找出问题吗?

最佳答案

您能否将结果集参数重命名为“ScoreResultSet”?

所以

declareParameter(new SqlReturnResultSet("ScoreResultSet", mScoreMapper));

List<Score> lAllScore = ((List<Score>)lAllScoreResult.get("ScoreResultSet"));

当 spring 自动为结果集生成名称时,您当前使用的名称也会被使用。

因此,我认为您现在可能会返回一个不同的、未处理的结果集,而不是您声明的 SqlReturnResultSet 参数中的映射结果集。

======

编辑:

我刚发现你的另一个问题:Java StoredProcedure with SqlReturnResultSet not working并假设我们正在谈论相同的存储过程:

我怀疑您在存储过程中有两个选择,它返回两个结果集。您应该声明两个(正确命名的)SqlReturnResultSet 参数而不是一个。声明的顺序很重要,因此您不能只声明一个,然后给它取通常分配给第二个的名称。

关于java - 存储过程的结果集包含 LinkedCaseInsensitiveMap<V> 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19368520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com