首页 > 解决方案 > 异步数据库查询的返回值

问题描述

我正在寻找一种通用方法来从 HikariCP 数据库查询返回 ResultSet(或 CachedResultSet,因为连接关闭)

我环顾四周,一个建议的选项是使用带有回调的 FutureTask,这就是我尝试过的:

    public static CachedRowSet query(String query) {
    FutureTask<CachedRowSet> future =
            new FutureTask(new Callable() {
                public CachedRowSet call() {
                    try {
                        Connection connection = hikari.getConnection();
                        ResultSet set = connection.prepareStatement(query).executeQuery();

                        CachedRowSet crs = new CachedRowSetImpl();
                        crs.populate(set);

                        set.close();
                        connection.close();

                        return crs;
                    } catch (SQLException e) {
                        e.printStackTrace();;
                        return null;
                    }
                }
            });

    try {
        CachedRowSet crs = future.get();
        return crs;
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
        return null;
    }
}

它只是挂起。整个方法没有完成,我想知道我做错了什么?(定期查询数据库是没有问题的,因为我刚才搬到了这里)

或者,您能否提出更好的选择并指导我前进?

标签: javadatabaseasynchronoushikaricp

解决方案


推荐阅读