gpt4 book ai didi

java - Jersey - 从 ResultSet 返回流

转载 作者:行者123 更新时间:2023-12-01 05:28:50 24 4
gpt4 key购买 nike

我有一个带有 CLOB 字段的表 (MySQL MediumText)。

我想将输入流返回到该 CLOB。我的资源代码如下所示:

@GET
public StreamingOutput getAsStream(int id) {
try {
// prepare the statement object
ResultSet rs = stmt.executeQuery();
if (rs.next()) return new StreamingOutput() {
public void write(OutputStream outputStream) throws ... {
copy(rs.getBinaryStream(1), outputStream);
}
}
}
finally {
rs.close();
stmt.close();
connection.close();
}
}

这看起来不对。在 Jersey 有机会将流写入响应之前,代码会关闭数据库资源(结果集、语句和连接)。

我可以在StreamingOutput.write方法中关闭数据库资源。但它也感觉不对 - 我让一些外部容器关闭我的资源。

我能想到的最后一个想法是将整个流读入内存然后发送。我当然不想这么做。

那么,有人有更好的主意吗?

我检查了Return a file using Java Jersey这没有多大帮助。

谢谢,多伦

最佳答案

是的,您显示的代码将不起作用。您在方法中创建了一个匿名内部类,然后将其作为返回对象传递给容器。新类中的写入对象实际上不会被调用,直到您的方法完成后的某个时间,当然,此时您已经关闭了所有连接。

从概念上讲,尝试直接从数据库进行流传输可能不是一个好主意。您不希望在客户端决定消耗输入流的时间内保持连接打开状态。最好的办法是将数据读入内存,然后将该数据传输到客户端。

关于java - Jersey - 从 ResultSet 返回流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348305/

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