1

セットをクエリして、Spring JdbcTemplate を使用してハッシュ マップ オブジェクトとして返そうとしています。しかし、いくつかの理由で、サーバーから空の結果セットを取得しています。全体的な構成に問題がある可能性がありますが、残りのクエリは問題なく動作しています。

これが私がクエリする方法です

public Map<Integer, String> getCompanyDataservers() {
    return getTemplate().queryForObject("select id, dataserver from company", new RowMapper<Map<Integer,String>>() {
        @Override
        public Map<Integer, String> mapRow(ResultSet rs, int rowNum)
                throws SQLException {
            HashMap<Integer, String> toReturn = new HashMap<Integer, String>();
            while(rs.next()) {
                int id = rs.getInt("id");
                toReturn.put(id, dataserver);
            }
            return toReturn;
        }});
}

いくつかのデバッグ ステートメントとログ ステートメントの後、結果セットに行がないように見えると結論付けました。DBから直接手動で同じ(「select id、dataserver from company」)クエリを実行すると、目的の結果が得られます。しかし、この方法では、0 行の結果セットが得られます。

私の理論の 1 つは、この方法でオブジェクトを照会するときに、この種のセットを取得できないというものです。しかし、自由にクエリを実行して、クエリの結果としてより精巧なオブジェクトを構築する可能性はありませんか、または目的のデータを取得して後で変換するために「queryForList」で使用される専用のクラスを作成する必要がありますか?

それとも、何かが足りないのですか?

4

1 に答える 1

4

rs.next()内部で呼び出すことは想定されていませんmapRow。JdbcTemplate は、結果セットのすべての行に対してmapRow呼び出します

あなたがする必要があるのは、単一のデータベース行mapRowを表す HashMap を返すだけです。Spring が結果セットの反復を行います。

于 2013-07-18T23:11:46.117 に答える