バイナリ データ (PDF など) を Oracle データベースの BLOB に入れたいと考えています。最初に、PDF を FileInputStream に入れ、バイト配列を作成しました。そのコードは次のとおりです。
public static byte[] createByteArray(File pCurrentFolder, String pNameOfBinaryFile)
{
String pathToBinaryData = pCurrentFolder.getAbsolutePath()+"/"+pNameOfBinaryFile;
File file = new File(pathToBinaryData);
if (!file.exists())
{
System.out.println(pNameOfBinaryFile+" could not be found in folder "+pCurrentFolder.getName());
return null;
}
FileInputStream fin = null;
try {
fin = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
byte fileContent[] = new byte[(int) file.length()];
try {
fin.read(fileContent);
} catch (IOException e) {
e.printStackTrace();
}
return fileContent;
}
これ (バイト配列) を MyBatis 経由でデータベースに送信したところ、うまく機能したため、BLOB に PDF があり、データベースから PDF を読み取ることもできました。しかし、今、私は次の問題に直面しています: 特定のデータベースに接続し、すべてのコンテンツを xml ファイルに保存する検索エンジン用の JDBC コネクタ (FAST ESP ... しかし、それは重要ではありません) があります。この xml ファイル内には、CDATA フィールド内にバイナリ データを含む「data」という要素があります。
この xml を解析したい場合、Java は次のように指示します。
The content of elements must consist of well-formed character data or markup.
一部の PDF では機能しますが、機能しないものもあります。問題は、それらを間違った方法でデータベースに保存したことだと思います。
詳細については、以前に尋ねた別の質問に敬意を表しますが、これはそれに似ています。
Java: 解析中に xml ファイルのバイナリ データをスキップする
そこの誰かが、PDF (または任意のバイナリ ファイル) を base64 でエンコードする必要があると言いました。つまり、PDF を FileInputStream に入れるだけでなく、byte[] を保存し、この byte[] をデータベースの BLOB に入れます。PDF をデータベース内に正しい方法で保存し、後で JDBC コネクタが作成する XML ファイルを正しく解析できるようにするには、どうすればよいですか?