gpt4 book ai didi

java - jOOQ,Query的异步执行

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:52 25 4
gpt4 key购买 nike

我想知道是否可以使用 jOOQ 直接执行异步删除或更新查询.

dslContext.delete(MY_TABLE).where(...).execute();

我只能在 ResultQuery 中找到异步获取的方法

resultQuery.fetchLater();

有没有简单的方法来做到这一点?

最佳答案

请注意,从 jOOQ 3.10 开始,由于 jOOQ 仍然依赖于 JDBC,“异步”调用仅将阻塞的 JDBC 调用异步委托(delegate)给某个执行程序,但该执行程序仍会阻塞 JDBC 连接。

Oracle is currently working on a new, truly asynchronous API that complements JDBC .一旦稳定下来,jOOQ 也会适应它,并且能够在数据库中真正异步地运行语句。

同时...

后 Java 8/后 jOOQ 3.8 解决方案

jOOQ 3.8 引入了对 Java 8 的 CompletionStage 的支持。您现在可以运行:

CompletionStage<Integer> completion = ctx.delete(MY_TABLE).where(...).executeAsync();

您还可以选择将 Executor 传递给 executeAsync()方法。

Java 8 之前/jOOQ 3.8 之前的解决方案

使用 jOOQ 执行异步查询的一种方法是通过使用 Java 自己的并发 API。例如,您可以编写以下代码:

final Query query = dslContext.delete(MY_TABLE).where(...);

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(new Callable<Integer>() {
@Override
public Integer call() {
return query.execute();
}
});

请注意,自 #2581 起,jOOQ 3.2 已弃用 fetchLater() 方法.

关于java - jOOQ,Query的异步执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18644422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com