java - 使用Byte数组和BitSet类从JAVA中的SQL表中检索二进制数据

标签 java sql-server-2005 bitset

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

X 列中的值 - 00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000 000000

即 15x8=120 位

SQL查询

Select X from tablename;

用于检索值的 Java 代码部分:barrybyte[]bitsnew 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/

相关文章:

scala - 在 Scala 中迭代 java.util.BitSet

java - 点对点聊天安全选项?

java - 适用于 Android 的 RTP 库

java - 我想给jdk 1.6添加一个外部库

sql-server - 仅插入唯一值

Java:计算 java.util.BitSet 中设置的位数

java - 为什么我们需要 JDBC 的连接池?

c++ - ODBC Execute/Fetch of SQL 2005 存储过程结果集不能使用表@variable

sql - 查询SQL Server中三个表的数据

Java-将多维数组映射到单维数组