# MySQL: Anfragen von Bits aus der Datenbank



## Gayson (2. Aug 2009)

Hallo!

Ich habe eine Tabelle, wo die ersten Spalte beliebige Byte-Arrays bis 96 bits und die zweite Spalte beliebige Byte-Arrays mit undefinierter Anzahl an Bits speichern soll (MySQL). Dabei ist die erste Spalte auch gleichzeitig Primärschlüssel:


```
CREATE TABLE `my_database`.`my_table` (
`column1` TINYBLOB NOT NULL,
`column2` TINYBLOB NOT NULL,
PRIMARY KEY USING BTREE(`column1`(96))
) ENGINE = InnoDB;
```

Darauf würde ich gerne eine Select-Abfrage machen, und zwar so:

```
byte[][] bytesArray = ...;
PreparedStatement stmt = conn.prepareStatement("SELECT column2 FROM my_table WHERE column1 IN (?)")
stmt.setArray(1, conn.createArrayOf(?????, bytesArray));
```

Mein Problem ist, dass ich nicht genau weiß, wie ich dieses Array von Bits mit JDBC setzen kann (siehe letzte Zeile im Code).

Könnt ihr mir da weiterhelfen? Vielen Dank!


----------



## ice-breaker (2. Aug 2009)

Du möchtest also alle Einträge bei denen zB Bit 13 eine 1 ist?
Das geht mit IN() nicht, du könntest du bitweisen Operationen nutzen, aber ob das wirklich sinnvoll ist...

Wieso wird das denn benötigt? Kannst du deine Daten nicht in ein relationales Model in deiner DB abbilden?


----------



## Gayson (2. Aug 2009)

Ich möchte ganz normal über den Primärschlüssel zugreifen. Wenn ich also z.B. nach den Bits "1100" und "110001111" suchen möchte, soll das dann in "column1 IN (1100, 110001111)" enden. Was beispielweise funktioniert:

```
byte[][] bytesArray = ...;
PreparedStatement stmt = conn.prepareStatement("SELECT column2 FROM my_table WHERE column1 = ?")
stmt.setBytes(1, bytesArray[0]);
stmt.executeQuery;
stmt.setBytes(1, bytesArray[1]);
stmt.executeQuery;
stmt.setBytes(1, bytesArray[2]);
stmt.executeQuery;
```

An dieser Stelle möchte ich halt gerne ein IN verwenden...


----------



## sparrow (2. Aug 2009)

Da kannst du versuchen setArray zu verwenden um den Platzhalter zu befüllen, in der Regel haben JDBC-Treiber das aber nicht integriert. Falls das also nicht geht müsstest du deine Abfrage dynamisch zusammen basteln. Das untergräbt allerdings den Sinn von PreparedStatements


----------

