用字节数组和位集类从JAVA中的SQL表中检索二进制数据

用字节数组和位集类从JAVA中的SQL表中检索二进制数据,java,sql-server-2005,bitset,Java,Sql Server 2005,Bitset,表结构-X列(二进制(15),null) 第X列中的值-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

表结构-X列(二进制(15),null)

第X列中的值-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

i、 e 15x8=120位

SQL查询

Select X from tablename;
用于检索值的Java代码部分:barraybyte[]bitsnew BitSet()

barray=resultset.getBytes(“X”);
如果(barray!=null){
对于(int i=0;i如果((barray[barray.length-i/8-1]&(1我认为您的错误超出了您发布的代码范围,因为我将其包装在这个程序中,它在这里工作:

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);
    }
}

代替示例数组,显示
{77}
then.

Java代码部分:barray=resultSet.getBytes(“X”);if(barray!=null){for(int i=0;i您得到了哪些字节?只需将它们打印出来,看看您是否从数据库中获得了非零数据——然后您就可以确定问题是在数据库读取中还是在位集转码中。下一次:您可以通过在源文件前加4个空格或使用``内联包装来格式化源文件。是的,您是对的。我已经解决了这个问题谢谢你的时间。@JavaBits:原因是什么?
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};