有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpring的存储过程,解析结果映射

我已经用Spring&;在MySQL上休眠。 我想调用一个MySQL存储过程。 该过程接受2个浮点参数,并返回一个包含3个字段的结果集。整数,整数,浮点

我创建了一个扩展spring的StoredProcess的类。 这是执行函数:

public Map execute(float longitude, float latiude) {
Map inparams = new HashMap(2);
inparams.put("longitude", (float) longitude);
inparams.put("latitude", (float) latiude);
Map out = execute(inparams);

问题是我不知道如何解析映射结果。 当我调试时,我看到所有的结果集都在那里,但是它以一种奇怪的方式排列,我不知道如何提取字段

为了向您展示它的外观,我所能做的就是为您提供out(Map)的toString() 这是:

{#result-set-1=[{id=4, out1=100, distance=40.9}, {id=5, out1=100, distance=47.7}, {id=6, out1=100, distance=22.3}, {id=7, out1=100, distance=27.4}, {id=8, out1=100, distance=22.1}, {id=9, out1=100, distance=18.3}, {id=10, out1=100, distance=20.1}, {id=11, out1=100, distance=28.6}, {id=12, out1=100, distance=23.1}], #update-count-1=0}


共 (2) 个答案

  1. # 1 楼答案

    因为您使用的是Spring,所以可以使用Jackson ObjectMapper。 这比第一个答案更简单

    class Foo {
      private int id;
      private int out1;
      private double distance;
      // getters and setters
    }
    
    ObjectMapper objectMapper = new ObjectMapper();
    List<Foo> list = objectMapper.convertValue(execute.get("#result-set-1"), new TypeReference<List<Foo>>() {});
    

    我希望,即使这个问题存在很长时间,这也会有所帮助:)

  2. # 2 楼答案

    我会在调试器中查看类型是什么;IntelliJ可以很容易地告诉我

    在我看来,它像一个Map<String, Object>。键是“#结果集-1”和“#更新计数-1”

    第一个键的值是一个映射列表,每返回一行一个映射。键是列名,值是返回值

    第二个键的值是一个整数;它是零,因为你做了选择

    因此,为了解释清楚,下面是如何提取结果(对于最初的编码错误,很抱歉):

    // Foo is some unknown object that encapsulates each row.
    List<Foo> results = new ArrayList<Foo>();
    Map<String, Object> rows = (Map<String, Object>) out.get("#result-set-1");
    for (Map row : rows) {
        int id = row.get("id");
        int out1 = row.get("out1");
        double distance = row.get("distance");
        results.add(new Foo(id, out1, distance));
    }
    return results;