0

hsqldbデータベースがパッケージ化されています。これは、データベースファイル(mydb.scriptおよびmydb.lobs)を含むjarファイルです。

「res」URL(jdbc:hsqldb:res:mydb)を使用してデータベースに接続する場合、BLOB列からバイトを取得することを除いて、すべてのクエリは正常に機能します。これは私が得る例外です:

Caused by: org.hsqldb.HsqlException: file input/output error
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.types.BlobDataID.getBytes(Unknown Source)
    at org.hsqldb.types.BlobInputStream.readIntoBuffer(Unknown Source)

「ファイル」URLを使用して同じデータベースに接続すると、すべてが機能します。BLOB列からバイトを取得するために使用されるコードは次のとおりです。

// rs is ResultSet
Blob blob = rs.getBlob(i + 1);
int blobSize = (int) blob.length();
byte[] bytes = new byte[blobSize];
InputStream is = blob.getBinaryStream();
try {
    is.read(bytes, 0, blobSize);
} catch (IOException e) {
    logger.error("Error reading bytes from blob: ", e);
}

「res」URLを使用するとBLOB列からのバイトの読み取りが失敗し、「file」URLを使用すると成功する原因となる可能性のあるアイデアはありますか?

4

1 に答える 1

1

データベースがリソースとして(クラスパスまたはjarで)使用されている場合、LOBはバージョン2.2.9までのHSQLDBではサポートされていません。次のバージョンはそれをサポートするはずです。

最初のサポートは、以下からダウンロードできる最新のHSQLDBスナップショットjarに追加されました。

http://www.hsqldb.org/repos/org/hsqldb/hsqldb/SNAPSHOT/

于 2012-10-12T14:02:11.383 に答える