我想从“解释”查询时获得的查询计划中捕获成本数字。有没有办法在Java ResultSet(或类似对象)中获取此数据?
答案 0 :(得分:8)
当然,只需将其作为常规声明运行:
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("explain analyze select * from foo");
while (rs.next())
{
System.out.println(rs.getString(1));
}
答案 1 :(得分:2)
除了上面提供的答案之外,我建议您使用在PostgreSQL 9.0及更高版本中将EXPLAIN计划格式化为XML的能力。
EXPLAIN(分析,格式化xml)SELECT ...
这将为您提供解释输出,您可以通过将其作为XML进行操作来更轻松地使用Java。
答案 2 :(得分:0)
这是另一个有关PreparedStatement的示例。
赞:
PreparedStatement preparedStatement = connection.prepareStatement("EXPLAIN (ANALYZE true , VERBOSE true , BUFFERS true)" +
"SELECT * FROM Table");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}
或带有绑定参数:
PreparedStatement preparedStatement = connection.prepareStatement("EXPLAIN (ANALYZE true , VERBOSE true , BUFFERS true)" +
"SELECT * FROM Player WHERE id = ?");
preparedStatement.setLong(1, 1);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}