استرداد البيانات الثنائية من جدول SQL في JAVA باستخدام صفيف Byte وفئة BitSet
-
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}
ثم.
لا تنتمي إلى StackOverflow