我使用UniFile.read()
方法使用UniObjects for Java从UniVerse数据库中读取数据。这是我用于此目的的代码类型的一个示例。
...
UniFile uFile = uSession.open ("ORDERS");
UniDataSet datasetRequest = getUnidatasetRequest();
UniDataSet datasetResult = uFile.read(datasetRequest);
...
对于大多数查询,这是有效的,但是当我尝试读取目标文件(例如SOMEFILE.O
)时,此读取将截断文件中的记录。我在想,目标代码中的特殊字符会导致问题。
有没有办法使用UniObjects for Java读取目标代码记录?
答案 0 :(得分:0)
这就是我们最终做的事情:
我找不到让数据集读取二进制代码的方法,所以我使用子程序一次读取一个项目。在可以读取项目之前,我必须在数据库上安装并运行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)
...
此子例程将基本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);
...
}