استرداد البيانات الثنائية من جدول SQL في JAVA باستخدام صفيف Byte وفئة BitSet

StackOverflow https://stackoverflow.com/questions/5391097

  •  28-10-2019
  •  | 
  •  

سؤال

هيكل الجدول - العمود X(ثنائي (15)،خالي)

القيمة في العمود X - 0000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000

أي 15 × 8 = 120 بت

استعلام SQL

Select X from tablename;

جزء كود Java لاسترداد القيمة: barray يكون 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} ثم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top