0

我正在使用 MATLAB 访问 postgresql 数据库。我在尝试访问类型列时遇到问题boolean[]

x;#% x is a <1x1 org.postgresql.jdbc4.Jdbc4Array>

访问real[]值时,我可以采取以下方法:

double(x.getArray());

不幸的是,boolean[]这会导致以下错误消息:

Undefined function 'toDouble' for input arguments of type 'logical'.

所以我认为转换为logicalfirst 可能有效:

logical(x.getArray());

除了这也不起作用。

Error using logical
Conversion to logical from java.lang.Boolean[][] is not possible.

可能会出现问题,因为 java.lang.Boolean 不是从 java.lang.Number 派生的,但是关于转换 java 返回类型的 MATLAB 文档使这看起来不应该是一个问题。

我在这里做错了吗?如何从fetch结果中获取可在 MATLAB 中使用的逻辑数组?如果一切都失败了,我可以用数字类型的数组而不是 重建表boolean[],但看起来这应该是可能的,而不是那么远。

4

1 回答 1

1

我怀疑这是由于 Java 中Boolean(一个对象) 和boolean, 一个原语之间的差异造成的。Matlab 转换实际上是为处理原语而设置的,不一定是它们关联的对象包装器。

我认为这个转换需要一个循环,如下:

%Setup test
b = java.lang.Boolean.FALSE;
array = java.lang.reflect.Array.newInstance(b.getClass(), [5 6]);
for ix1=1:length(array); 
    for ix2 = 1:(length(array(1))); 
        array(ix1, ix2)=b; 
    end; 
end;
%Now `array` is an initialize 2D Java array of type Boolean.

%To convert to a Matlab logical array
matArray = false(length(array), length(array(1)));  %Initialize
for ix1=1:size(matArray, 1); 
    for ix2 = 1:size(matArray, 2); 
        matArray(ix1, ix2)=(array(ix1, ix2).booleanValue());
        %The  `booleanValue()` method converts from `Boolean` class  to `boolean` primitive
    end; 
end;
于 2012-05-18T19:38:00.273 回答