我编写了一个小型Java应用程序来读取Access 2007数据库中的数据。我可以阅读所有字段,但不能阅读包含照片的字段。字段类型为“附件”。
当我调用.getBlob()
对象的ResultSet
方法时,我遇到了“UnsupportedOperationException”。
正如我在多个网站上所建议的那样,我尝试调用.getBytes()
和.getBinaryStream()
方法,但两者都只返回附件的文件名,但不是内容。
答案 0 :(得分:1)
UCanAccess JDBC驱动程序可以从Access数据库的Attachment字段中提取文件。对于名为[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驱动程序的更多信息,请参阅
答案 1 :(得分:0)
HXTT Access可以获得未压缩的附件数据,但不支持压缩的附件数据。
答案 2 :(得分:0)
我在某些情况下找到了一个肮脏的解决方法......
表的XML导出包含用一些额外数据编码的base64图片。使用stax XML API的Java应用程序可以轻松处理这些数据。它几乎是直接的,但二进制数据开头的20字节开销必须被截断。 Read this!
如果你处于可以忍受的状态,那么只有你完成了。如果您必须定期但不是实时执行此操作,则可以从here描述的访问中尝试.ExportXML API。
欢呼声