- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我希望能够从数据库中读取文档并从中提取一些数据。我能够完成第二部分,但我无法高效完成。有没有一种更有效的方法来读取 BLOB 而无需先在本地写入它们?如您所见,我将数据保存到硬盘驱动器上的文档中,速度非常慢。
final String url = "connectioninfo";
final String username = "user";
final String password = "password";
try {
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT document_id, file_name, data FROM documents WHERE file_name like '%.doc'";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet resultSet = stmt.executeQuery();
while (resultSet.next()) {
String da_document_id = resultSet.getString(1);
String file_name = resultSet.getString(2);
File data = new File("c:\\databaseDoc.doc");
FileOutputStream fos = new FileOutputStream(data);
byte[] buffer = new byte[1];
InputStream is = resultSet.getBinaryStream(3);
try {
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("da_document_id= " + da_document_id);
System.out.println("file_name= " + file_name);
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
最佳答案
它慢的部分原因是您一次读取一个字节。这绝不是一个好主意。如果您使用的是 Java 9,我还建议您使用 InputStream.transferTo(OutputStream)
让事情变得更简单:
但是不,您不需要写入 FileOutputStream
- 您可以将数据复制到 ByteArrayOutputStream
中,此时您可以轻松创建一个 字节[]
:
ByteArrayOutputStream output = new ByteArrayOutputStream();
try (InputStream input = resultSet.getBinaryStream(3)) {
input.transferTo(output);
}
byte[] data = output.toByteArray();
或者,如果您希望使用数据的方式已经接受InputStream
,只需使用getBinaryStream
返回的流.不过,请确保您知道什么时候可以关闭流 - 有些用法可能会懒惰地阅读。
关于java - 有没有一种更有效的方法来读取 BLOB 而无需先在本地写入它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461227/
几个月前,我做了一个功能,我的应用程序正在等待用户文档并做出相应的响应。直到我对项目进行优化并将其更新到最新版本之前,它一直是一种魅力。 如果存在用户文档,则流将产生该文档并关闭该流。 如果云Fire
Stack Overflow 有几个 examples其中函数首先获得可升级锁,然后通过升级获得独占访问。我的理解是,如果不小心使用,这可能会导致死锁,因为两个线程可能都获得了可升级/共享锁,然后都尝
这个问题在这里已经有了答案: MVC 4 Code First ForeignKeyAttribute on property ... on type ... is not valid (1 个回答
以下是部分代码。我需要在 finally 子句中关闭资源。我需要先调用 closeEntry() 还是 close()?我收到一些错误消息。 Error closing the zipoutjava.
我想使用 RxJS-DOM 观察 mousewheel 事件,这样当第一个事件触发时,我转发它然后删除所有值,直到后续值之间的延迟超过先前指定的持续时间。 我想象的运算符可能看起来像: Rx.DOM.
版本似乎与安装的不同。 我在 npm install 上收到警告 我将二进制文件安装到我的家庭/开发目录中,但它不适用于 sudo。所以我安装了apt。 (注意:我并没有真正安装,我提取并将路径放在/
我正在尝试展示 GAN 网络在某些指定时期的结果。打印当前结果的功能以前与 TF 一起使用。我需要换成 pytorch。 def show_result(G_net, z_, num_epoch, s
我是一名优秀的程序员,十分优秀!