我已经使用Spring& amp; Hibernate over MySQL。 我有一个MySQL存储过程我想打电话。 该过程采用2个浮点参数,并返回包含3个字段的结果集。整数,整数,浮点数。
我创建了一个扩展spring的StoredProcedure的类。 这是执行功能:
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);
问题在于我不知道如何解析地图结果。 当我进行调试时,我发现所有的结果都在那里,但它以一种奇怪的方式排列,我不知道如何提取字段。
我能做的最好的方法就是向你展示它的外观(Map)toString() 这是:
{#result-set-1 = [{id = 4,out1 = 100,距离= 40.9},{id = 5,out1 = 100, 距离= 47.7},{id = 6,out1 = 100,距离= 22.3},{id = 7,out1 = 100, 距离= 27.4},{id = 8,out1 = 100,距离= 22.1},{id = 9,out1 = 100, 距离= 18.3},{id = 10,out1 = 100,距离= 20.1},{id = 11,out1 = 100, 距离= 28.6},{id = 12,out1 = 100,距离= 23.1}],#update-count-1 = 0}
答案 0 :(得分:3)
我会在调试器中查看类型是什么; IntelliJ可以很容易地告诉我这一点。
对我来说,它看起来像Map<String, Object>
。键是“#result-set-1”和“#update-count-1”。
第一个键的值是一个地图列表,每行返回一个地图。键是列名,值是返回值。
第二个键的值是整数;它是零,因为你做了一个SELECT。
因此,为了拼写它,这里是如何提取结果(抱歉初始编码错误):
// 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;
答案 1 :(得分:0)
由于您使用的是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>>() {});
即使这个问题长期存在,我也希望能有所帮助:)