我在我的Java EE代码中调用Postgresql函数,但它没有返回任何内容。(它导致sql查询)
public List<Integer> convertIdsToLats12(Integer src, Integer dest) {
List<Integer> ids = new ArrayList<Integer>();
ResultSet resultSet = null;
try {
Context ctx = new InitialContext();
DataSource source = (DataSource) ctx.lookup("java:/RoutingDS");
Connection connection = source.getConnection();
CallableStatement statement = connection
.prepareCall("{ ? = call pgr_astar( ?, ?, ?, ?, ? ) }");
statement
.setString(
2,
"SELECT gid AS id, source::integer, target::integer, length::double precision AS cost, x1, y1, x2, y2 FROM waysF");
statement.setObject(3, src);
statement.setObject(4, dest);
statement.setBoolean(5, false);
statement.setBoolean(6, false);
statement.registerOutParameter(1, Types.OTHER);
System.out.println("*************AVANT");
statement.execute();
System.out.println("*************APRES");
resultSet = (ResultSet) statement.getObject(1);
while (resultSet.next()) {
ids.add((Integer) resultSet.getObject(2));
}
resultSet.close();
statement.close();
} catch (Exception e) {
// TODO: handle exception
}
return ids;
}
这是我的方法,它有什么问题吗?
答案 0 :(得分:0)
您的代码严重错误 - 您有一个空catch
块。永远不要那样做。永远。它被称为&#34;默默地吞咽&#34;一个例外,是掩盖错误的好方法,因此您无法查看到底发生了什么。
删除它并将throws SQLException
添加到方法声明中,或者输入一些代码来记录任何捕获的异常,例如:
} catch (SQLException e) {
logger.severe("Whoops, query failed" + e);
}
很可能会告诉你出了什么问题。 (显然你应该写一个比这更好的错误信息,最好包括完整的异常堆栈跟踪,查询文本,参数等。这只是一个基本的例子。)
你绝不应该catch (Exception e)
。根据需要捕获特定的异常类型。这是一个糟糕的编程习惯,会导致你捕捉到你并不意味着的例外。