2

I wrote a small Java application to read data from an Access 2007 database. I can read all fields but not the one containing the photo. The field type is "Attachment".

When I call the .getBlob() method of the ResultSet object I catch an "UnsupportedOperationException".

As suggested on several websites I tried to call .getBytes() and .getBinaryStream() methods but both only return the filename of the attachment but not it's content.

4

3 回答 3

1

UCanAccess JDBC 驱动程序可以Access 数据库的附件字段中提取文件。对于名为 [AttachmentsTable] 的表

ID - 自动编号,主键
描述- 文本 (255)
附件- 附件

以下代码将提取 ID=1 的记录的 [附件] 字段中的所有文件:

import java.io.File;
import java.sql.*;
import net.ucanaccess.complex.Attachment;

...

String dbFileSpec = "C:/Users/Public/AttachmentsDB.accdb";
String connStr = "jdbc:ucanaccess://" + dbFileSpec;
try (Connection conn = DriverManager.getConnection(connStr)) {
    try (Statement s = conn.createStatement()) {
        try (ResultSet rs = s.executeQuery(
                "SELECT Attachments FROM AttachmentsTable WHERE ID=1")) {
            rs.next();
            // retrieve array of net.ucanaccess.complex.Attachment objects
            Attachment[] atts = (Attachment[]) rs.getObject(1);
            for (Attachment att : atts) {
                System.out.println(att.getName());
                org.apache.commons.io.FileUtils.writeByteArrayToFile(
                        new File("C:/Users/Gord/Desktop/" + att.getName()), 
                        att.getData());
            }
        }
    }
}

有关使用 UCanAccess JDBC 驱动程序的更多信息,请参阅

在没有 ODBC 的情况下从 Java 操作 Access 数据库

于 2014-12-09T21:47:22.120 回答
0

在某些情况下,我发现了一个肮脏的解决方法......

表格的 XML 导出包含使用一些额外数据编码的 base64 图像。使用 stax XML API 的 java 应用程序可以轻松处理这些数据。这几乎是直截了当的,但必须截断二进制数据开头的 20 字节开销。读这个!

如果您处于舒适的环境中,那么您就完成了。如果您必须定期而不是实时执行此操作,您可以尝试使用此处描述的访问中的 .ExportXML API 。

干杯

于 2013-03-28T09:24:23.483 回答
0

HXTT Access可以获取未压缩的 Attachment 数据,但不支持压缩的 Attachment 数据。

于 2013-03-28T06:57:11.450 回答