我正在使用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'.
所以我认为先转换为logical
可能会有效:
logical(x.getArray());
除此之外也不起作用。
Error using logical
Conversion to logical from java.lang.Boolean[][] is not possible.
问题可能出现,因为java.lang.Boolean不是从java.lang.Number派生的,但是the MATLAB docs on conversion of java return types使它看起来不应该是一个问题。
我在这里做错了吗?如何从fetch
结果获取MATLAB中可用的逻辑数组?如果所有其他方法都失败了,我可以使用数值类型的数组而不是boolean[]
来重建表格,但看起来这应该是可能的,而不会走得那么远。
答案 0 :(得分:1)
我怀疑这是由于Boolean
(一个对象)和boolean
(一个原语)之间的Java差异造成的。 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;