【发布时间】:2015-07-30 13:59:57
【问题描述】:
我有下表People
我想获取关系记录并使 JSON Array 如下所示:
{ "Person":[
{"ID":1,
"FirstName":"James",
"LastName":"Donovan",
"Child":[
{"ID":6, "FirstName":"Nikolai", "LastName":"Donovan"}
]
},
{"ID":2,
"FirstName":"Jeffrey",
"LastName":"Williams",
"Child":[
{"ID":4, "FirstName":"Carol", "LastName":"Williams"},
{"ID":5, "FirstName":"Sarah", "LastName":"Williams"}
]
},
.... and so on
]
}
我使用以下方法; 以下代码的简短摘要:我在循环中执行了两次 db 操作并将节点放入 JSON 对象中匹配某些条件。
preparedStatement = con.prepareStatement("SELECT * FROM PEOPLE");
rs = preparedStatement.executeQuery(); // ResultSet Object
if (rs != null && rs.next()) {
Roles = new JSONObject();
parentNode = new JSONObject();
childNode = new JSONObject();
while(rs.next()) {
parentNode.put("ID", rs.getInt("Id"));
parentNode.put("FirstName", rs.getString("firstname"));
parentNode.put("LastName", rs.getString("lastname"));
if(rs.getInt("parent") > 0) { // Equal 0 Mean it has not child
// Perform again database operation and get record related to parent id
preparedStatement = con.prepareStatement("SELECT * FROM PEOPLE WHERE parent=?");
preparedStatement.setString(1, rs.getInt("id");
resultSet2 = preparedStatement.executeQuery();
while(resultSet2.next()) {
childNode.put("ID", rs.getInt("Id"));
childNode.put("FirstName", rs.getString("firstname"));
childNode.put("LastName", rs.getString("lastname"));
parentNode.put("Child":childRole); // put child into parent node
}
}
}
}
我想要什么? 在循环中执行 db select 查询对于服务器端来说太昂贵了。
有没有更好的解决方案可以生成所需的关系数据 JSON 并让我免于额外的 SELECT 操作!
感谢您的关注!
【问题讨论】:
-
你能把所有的
People放在Map中,使用id 作为键吗?如果记录的数量不是太多,这将为您节省一些资源。
标签: java mysql json jakarta-ee