首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过JDBC从MS Access“附件”字段中检索文件?

如何通过JDBC从MS Access“附件”字段中检索文件?
EN

Stack Overflow用户
提问于 2013-03-23 01:24:28
回答 3查看 2K关注 0票数 2

我编写了一个小型Java应用程序来从Access 2007数据库中读取数据。我可以读取所有字段,但不能读取包含照片的字段。字段类型为"Attachment“。

当我调用ResultSet对象的.getBlob()方法时,我捕获了一个"UnsupportedOperationException“。

根据几个网站的建议,我尝试调用.getBytes().getBinaryStream()方法,但这两个方法都只返回附件的文件名,而不返回其内容。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-10 05:47:22

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

ID - AutoNumber,主键

描述-文本(255)

附件-附件

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

代码语言:javascript
运行
复制
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驱动程序的详细信息,请参阅

Manipulating an Access database from Java without ODBC

票数 1
EN

Stack Overflow用户

发布于 2013-03-28 14:57:11

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

票数 0
EN

Stack Overflow用户

发布于 2013-03-28 17:24:23

我在某些情况下找到了一种肮脏的变通方法...

表的XML导出包含使用一些额外数据进行base64编码的图片。使用stax XML API的java应用程序可以很容易地处理这些数据。它几乎是直截了当的,但二进制数据开头的20字节开销必须被截断。Read this!

如果你在合适的情况下做这件事,那你就完蛋了。如果您必须定期执行此操作,但不能实时执行此操作,您可以尝试使用access中描述的here中的.ExportXML应用编程接口。

干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15576402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档