NutzCN Logo
分享 发现,nutzWk里面的service有个错误,这个getMap
发布于 104天前 作者 sherwin28 106 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

发现,nutzWk里面的service有个错误,这个getMap

/**
     * 自定义sql获取map key-value
     *
     * @param sql
     * @return
     */
    public Map getMap(Sql sql) {
        sql.setCallback(new SqlCallback() {
            @Override
            public Object invoke(Connection conn, ResultSet rs, Sql sql)
                    throws SQLException {
                Map<String, String> map = new HashMap<>();
                while (rs.next()) {
                    map.put(Strings.sNull(rs.getString(1)), Strings.sNull(rs.getString(2)));
                }
                return map;
            }
        });
        this.dao().execute(sql);
        return sql.getObject(Map.class);
    }

更正之后是这样,欢迎指正讨论

4 回复

更正之后的代码

  /**
     * 自定义sql(只有一列的情况)
     * 获取map key(列名)-value(对应的至)
     *
     * @param sql
     * @return
     */
    public Map getMap(Sql sql) {
        sql.setCallback(new SqlCallback() {
            @Override
            public Object invoke(Connection conn, ResultSet rs, Sql sql)
                    throws SQLException {
                Map<String, String> map = new HashMap<>();
                ResultSetMetaData metaData = rs.getMetaData();
                while (rs.next()) {
                    for (int i = 1; i <= metaData.getColumnCount(); i++) {
                        map.put(Strings.sNull(metaData.getColumnName(i)), Strings.sNull(rs.getString(i)));
                    }
                }
                return map;
            }
        });
        this.dao().execute(sql);
        return sql.getObject(Map.class);
    }

直接报个issue多好?

没发现错误啊,rs.getString(1) rs.getString(2),固定就是两列,何必循环?

@Wizzercn 我看是我们理解这个方法用途各不一样吧,我理解这个方法是查询一个字段的,查询结果是一个值的,map的key是字段名称,value是对应的值。而可能你的意思是查询结果是两列一值的,对于一列就会报错了。

来自炫酷的 NutzCN

添加回复
请先登陆
回到顶部