2

Access2007データベースからデータを読み取るための小さなJavaアプリケーションを作成しました。すべてのフィールドを読み取ることはできますが、写真を含むフィールドは読み取ることができません。フィールドタイプは「添付ファイル」です。

.getBlob()オブジェクトのメソッドを呼び出すとResultSet、「UnsupportedOperationException」が発生します。

いくつかのWebサイトで提案されているように、メソッド.getBytes().getBinaryStream()メソッドを呼び出そうとしましたが、どちらも添付ファイルのファイル名のみを返し、コンテンツは返しません。

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

HXTT Accessは非圧縮の添付ファイルデータを取得できますが、圧縮された添付ファイルデータはサポートしていません。

于 2013-03-28T06:57:11.450 に答える
0

特定の状況での汚い回避策を見つけました...

テーブルのXMLエクスポートには、いくつかの追加データでエンコードされた画像base64が含まれています。stax XML APIを使用するJavaアプリケーションは、このデータを簡単に処理できます。これはほとんど簡単ですが、バイナリデータの先頭にある20バイトのオーバーヘッドを切り捨てる必要があります。これを読む!

あなたがそれをするのに快適な状況にあるならば、あなたが終わったものだけです。これを定期的に行う必要があるが、リアルタイムではない場合は、ここで説明するアクセスから.ExportXMLAPIを試すことができます。

乾杯

于 2013-03-28T09:24:23.483 に答える