当前位置: 首页 > 面试题库 >

jdbcTemplate.queryForList(sql,object,classType)的返回类型

关志勇
2023-03-14
问题内容

我正在以以下方式使用jdbcTemplate.queryForList执行命名查询:

List<Conversation> conversations = jdbcTemplate.queryForList(
            SELECT_ALL_CONVERSATIONS_SQL_FULL,
            new Object[] {userId, dateFrom, dateTo});

SQL查询为:

private final String SELECT_ALL_CONVERSATIONS_SQL_FULL = 
    "select conversation.conversationID, conversation.room, " +
    "conversation.isExternal, conversation.startDate, " +
    "conversation.lastActivity, conversation.messageCount " +
    "from openfire.ofconversation conversation " +
    "WHERE conversation.conversationid IN " +
    "(SELECT conversation.conversationID " +
    "FROM openfire.ofconversation conversation, " +
    "openfire.ofconparticipant participant " +
    "WHERE conversation.conversationID = participant.conversationID " +
    "AND participant.bareJID LIKE ? " +
    "AND conversation.startDate between ? AND ?)";

但是,当以以下方式提取列表的内容时:

for (Conversation conversation : conversations) {
builder.append(conversation.getId());
            builder.append(",");
            builder.append(conversation.getRoom());
            builder.append(",");
            builder.append(conversation.getIsExternal());
            builder.append(",");
            builder.append(conversation.getStartDate());            
            builder.append(",");            
            builder.append(conversation.getEndDate());
            builder.append(",");  
            builder.append(conversation.getMsgCount());
            out.write(builder.toString()); 
}

我收到一个错误:

java.util.LinkedHashMap cannot be cast to net.org.messagehistory.model.Conversation

如何将这个linkedMap转换为所需的对象?

谢谢


问题答案:

为了将查询的结果集映射到特定的Java类,最好使用RowMapper将结果集中的列转换为对象实例(假设您对在其他地方使用该对象感兴趣)。

有关如何使用行映射器的信息,请参见第12.2.1.1节“使用JDBC进行数据访问”。

简而言之,您将需要以下内容:

List<Conversation> actors = jdbcTemplate.query(
    SELECT_ALL_CONVERSATIONS_SQL_FULL,
    new Object[] {userId, dateFrom, dateTo},
    new RowMapper<Conversation>() {
        public Conversation mapRow(ResultSet rs, int rowNum) throws SQLException {
            Conversation c = new Conversation();
            c.setId(rs.getLong(1));
            c.setRoom(rs.getString(2));
            [...]
            return c;
        }
    });


 类似资料:
  • 问题内容: 我正在尝试从指定的URL返回JSON数据,但是当警报弹出时,它仅显示[object Object](我意识到object对象实际上不是错误)。 我想在警报中吐出职位名称和其他字段 。我该怎么做呢? 这是我正在查看的JSON示例(完整文件包含大约30个帖子) 这是我正在使用的脚本。 任何帮助深表感谢。 问题答案: 试试这个:

  • 为什么下面要抛出NullPointerException?: 提前致谢

  • 问题内容: 编辑 :我已经用这个问题获得了“著名问题”徽章,所以我想我会回到原来的位置,然后将发生的事情贴在非常尖锐的顶部,以便人们立即搜索得到答案。 基本上,我是JSON的新手。JSON是一个对象(显然),因为它包含各种东西!因此,我就像“嘿,JavaScript,只是弹出带有所有这些JSON数据的警报”,希望它以字符串的形式提供给我JSON数据。但是javascript并不能做到这一点(很好!

  • 问题内容: 我正在为网站进行股票交易所jQuery修复。 编辑:它根据返回的值更新网页上的ID / CLASS或输入值。 index.php: 目前它正在返回: 我也尝试过使用.text()将其返回到div demo.json: 请有人能告诉我我做错了什么。 提前致谢! 问题答案: 你可以这样做: 所以这里的主要问题是: 正如ajax一样,您需要执行ajax成功回调中的所有逻辑,并且始终会获得&变

  • 假设我已经包装了我的C类和,并且可以通过SWIG生成的模块从Python访问它们: 在Python中,我创建了面向用户的类,它是一个浅层代理,主要添加docstring,并允许IDE对参数名称进行制表符补全: 问题在于,返回类型为,它没有docstring,也不显示参数名称(swig将所有参数公开为)。相反,我希望它提供我自己的浅代理

  • 我有下面的课,我试图测试。我遇到问题的方法是,因为我试图存根/模拟行为,然后在测试中验证行为。