表结构 - X 列(二进制 (15),空)
X 列中的值 - 00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000 000000
即 15x8=120 位
SQL查询
Select X from tablename;
用于检索值的 Java 代码部分:barry
是 byte[]
,bits
是 new BitSet()
.
barray = resultset.getBytes("X");
if(barray != null) {
for (int i = 0; i < barray.length * 8; i++) {
if ((barray[barray.length-i/8-1]&(1<<(i%8))) > 0) {
bits.set(i);
}
}
}
问题:第二个 if 语句返回错误值(不确定 y?),因此位对象未填充。请提出解决方案。
最佳答案
我认为你的错误不在你发布的代码之外,因为我将它包装在这个程序中,并且它在这里工作:
package de.fencing_game.paul.examples;
import java.util.BitSet;
/**
* Test class for http://stackoverflow.com/questions/5391097/retrieving-binary-data-from-sql-table-in-java-with-byte-array-and-bitset-class.
*/
public class BitSetByteArrayTest {
public static void main(String[] params) {
byte[] barray= new byte[]{ 0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, (byte)0x80,
};
BitSet bits = new BitSet();
if(barray!=null){
for (int i=0; i<barray.length*8; i++) {
if ((barray[barray.length-i/8-1]&(1<<(i%8))) > 0) {
bits.set(i);
}
}
}
System.out.println(bits);
}
}
它也适用于您的输入
byte[] barray = { 0, 0, 0, 0, 0,
0x20, 0, 0, 0, 0,
0, 0, 0, 0, 0};
然后显示 {77}
,而不是示例数组。
关于java - 使用Byte数组和BitSet类从JAVA中的SQL表中检索二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5391097/