我编写了一个小型Java应用程序来从Access 2007数据库中读取数据。我可以读取所有字段,但不能读取包含照片的字段。字段类型为"Attachment“。
当我调用ResultSet对象的.getBlob()方法时,我捕获了一个"UnsupportedOperationException“。
根据几个网站的建议,我尝试调用.getBytes()和.getBinaryStream()方法,但这两个方法都只返回附件的文件名,而不返回其内容。
发布于 2014-12-10 05:47:22
UCanAccess驱动程序可以从Access数据库的附件字段中提取文件。对于名为AttachmentsTable的表
ID - AutoNumber,主键
描述-文本(255)
附件-附件
以下代码将提取ID=1所在记录的Attachments字段中的所有文件:
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驱动程序的详细信息,请参阅
发布于 2013-03-28 14:57:11
HXTT Access可以获取未压缩的附件数据,但不支持压缩的附件数据。
发布于 2013-03-28 17:24:23
我在某些情况下找到了一种肮脏的变通方法...
表的XML导出包含使用一些额外数据进行base64编码的图片。使用stax XML API的java应用程序可以很容易地处理这些数据。它几乎是直截了当的,但二进制数据开头的20字节开销必须被截断。Read this!
如果你在合适的情况下做这件事,那你就完蛋了。如果您必须定期执行此操作,但不能实时执行此操作,您可以尝试使用access中描述的here中的.ExportXML应用编程接口。
干杯
https://stackoverflow.com/questions/15576402
复制相似问题