我在 MySQL 上安装了 Spring 和 Hibernate。 我有一个我想调用的 MySQL 存储过程。 该过程采用 2 个浮点参数,并返回一个包含 3 个字段的结果集。整数、整数、 float 。
我创建了一个扩展 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 结果。 调试的时候看到所有的result-set都在里面,但是排列的很奇怪,不知道怎么提取字段。
为了向您展示它的外观,我能做的最好的事情就是给您 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}
最佳答案
我会在调试器中查看类型是什么; 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;
关于java - Spring的存储过程,解析结果Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439765/