Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Spring RowMapper只返回结果集中的最后一条记录?_Java_Spring_Jdbctemplate_Ojdbc - Fatal编程技术网

Java 为什么Spring RowMapper只返回结果集中的最后一条记录?

Java 为什么Spring RowMapper只返回结果集中的最后一条记录?,java,spring,jdbctemplate,ojdbc,Java,Spring,Jdbctemplate,Ojdbc,我试图使用sql查询语句从2个数据库表ADMIN_用户和提供程序中检索具有提供程序的用户 选择ADMIN\u USER.ID UserID、ADMIN\u USER.USER\u NAME、ADMIN\u USER.PASSWORD密码、ADMIN\u USER.FULL\u NAME全名、ADMIN\u USER.PRIVILEGE、ADMIN\u USER.PROVIDER\u ID、PROVIDERS.ID providerID、PROVIDERS.USER\u NAME PROVIDER

我试图使用sql查询语句从2个数据库表ADMIN_用户和提供程序中检索具有提供程序的用户

选择ADMIN\u USER.ID UserID、ADMIN\u USER.USER\u NAME、ADMIN\u USER.PASSWORD密码、ADMIN\u USER.FULL\u NAME全名、ADMIN\u USER.PRIVILEGE、ADMIN\u USER.PROVIDER\u ID、PROVIDERS.ID providerID、PROVIDERS.USER\u NAME PROVIDER from ADMIN\u USER、PROVIDER其中ADMIN\u USER.PROVIDER\u ID=PROVIDERS.ID

这就是我的方法 `公共列表用户{

    return DS.query(sqlQuery,new RowMapper<User>() {

                        public User mapRow(ResultSet rs, int rowNum)
                                throws SQLException {

                            User user = new User();
                            user.setId(rs.getInt("UserID"));
                            user.setUserName(rs.getString("Name"));
                            user.setPassword(rs.getString("Password"));
                            user.setFullName(rs.getString("fullName"));
                            user.setPrivilage(rs.getString("PRIVILEGE"));

                            Provider provider=new Provider();
                            provider.setId(rs.getInt("providerID"));
                             provider.setName(rs.getString("provider"));
                             user.setProvider(provider);

                            return user;    }}); }` 
但是它只返回方法结果集中的最后一条记录作为list.size显示size=1而不是4

我认为连接是正确的,因为结果记录显示正确的连接,但我认为RowMapper中的问题是什么

使用spring、JDBC、NamedParameterJdbcTemplate从2个联接表中检索数据还有其他方法吗


提前感谢

下面是一个使用spring的NamedParameterJdbcTemplate实现的示例

public class UserRepo {

    private NamedParameterJdbcTemplate jdbcTemplate;

    private static final String sqlQuery = "Your query here";


    //Assuming you are using spring and have a datasource bean defined named datasource
    @Autowired
    public UserRepo(Datasource datasource) {
        this.jdbcTemplate = new NamedParameterJdbcTemplate(datasource);
    }

    public List<User> getUsers() {
       List<User> results = jdbcTemplate.query(sqlQuery, new UserMapper());
    }

    private static final class UserMapper implements
                RowMapper<User> { 

        mapRow(ResultSet rs, int rowNum) throws SQLException {

        User user = new User();
        user.setId(rs.getInt("UserID"));
        user.setUserName(rs.getString("Name"));
        user.setPassword(rs.getString("Password"));
        user.setFullName(rs.getString("fullName"));
        user.setPrivilage(rs.getString("PRIVILEGE"));

        Provider provider=new Provider();
        provider.setId(rs.getInt("providerID"));
        provider.setName(rs.getString("provider"));
        user.setProvider(provider);

        return user;    
        }
    }
}

你有没有在java之外测试过这个查询,看看它是否返回了你所期望的结果?还有,DS是什么?如果你使用spring,我可以给你展示一个使用jdbcTemplate的示例。是的,我测试过它,效果很好-DS的名称是ParameterJDBCTemplate object,如果你有一个使用多个表的示例,请给我,并试着告诉我产生此结果的原因?!只需确保sql语句中的所有列名别名与您试图在rowMapper中将它们映射到的列名别名匹配。这与它仅返回最后一条记录的结果相同,并且返回列表的大小为1而不是4@Ericf