0

メソッドを使用して、UniObjects for Java を使用して UniVerse データベースから読み取っていますUniFile.read()。これは、私がこれに使用するコードのタイプの例です。

...
UniFile uFile = uSession.open ("ORDERS");
UniDataSet datasetRequest = getUnidatasetRequest();
UniDataSet datasetResult = uFile.read(datasetRequest);  
...

ほとんどのクエリではこれでうまくいきますが、オブジェクト ファイル (たとえばSOMEFILE.O) を読み込もうとすると、ファイル内のレコードが切り捨てられます。オブジェクト コード内の特殊文字が問題を引き起こしていると考えています。

UniObjects for Java を使用してオブジェクト コード レコードを読み取る方法はありますか?

4

1 に答える 1

0

これが私たちがやったことです:

データセットにバイナリ コードを読み取らせる方法が見つからなかったので、サブルーチンを使用して項目を 1 つずつ読み取りました。アイテムを読み取る前に、データベースに UniBasic サブルーチンをインストールして実行し、次のような方法でアイテムを base 64 にエンコードする必要がありました。

...

LOOP
    READBLK A.BYTE FROM FILE, 1 THEN NULL ELSE DONE = TRUE
UNTIL DONE DO
    TO.ENCODE = TO.ENCODE : A.BYTE
REPEAT
ENCODE('Base64', 1, TO.ENCODE, 1, RET.VALUE, 1)

...

このサブルーチンは、Base 64 でエンコードされたアイテムStringを UOJ に返し、デコードでき、データが失われることはありませんでした。Java コードの例を次に示します。

...
UniSubroutine readBlkSub = unisession.subroutine(routineName, 4);
readBlkSub.setArg(0, getNameID());
readBlkSub.setArg(1, itemName);
readBlkSub.call();
final String SUCCESS = "0";
if (readBlkSub.getArg(3).equals(SUCCESS)) {
    encodedObjectCode = readBlkSub.getArg(2);
    sun.misc.BASE64Decoder decoder = new BASE64Decoder();
    byte[] decodedBytes = decoder.decodeBuffer(encodedObjectCode);
    ...
}
于 2013-10-04T20:52:57.733 に答える