不从Java EE callablestatement中的postgresql函数返回任何内容

时间:2014-09-06 13:33:18

标签: postgresql rest java-ee jboss plpgsql

我在我的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;
}

这是我的方法,它有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您的代码严重错误 - 您有一个空catch块。永远不要那样做。永远。它被称为&#34;默默地吞咽&#34;一个例外,是掩盖错误的好方法,因此您无法查看到底发生了什么。

删除它并将throws SQLException添加到方法声明中,或者输入一些代码来记录任何捕获的异常,例如:

} catch (SQLException e) {
    logger.severe("Whoops, query failed" + e);
}

很可能会告诉你出了什么问题。 (显然你应该写一个比这更好的错误信息,最好包括完整的异常堆栈跟踪,查询文本,参数等。这只是一个基本的例子。)

你绝不应该catch (Exception e)。根据需要捕获特定的异常类型。这是一个糟糕的编程习惯,会导致你捕捉到你并不意味着的例外。