# Problem bei Boolean in PreparedStatement



## javabar (3. Feb 2012)

Der folgende Code


```
Connection conn;
...
PreparedStatement pstmt = conn.prepareStatement("UPDATE Artikel SET Aktiv=? WHERE Artikelnummer = ?");
pstmt.setBoolean(1, true);
pstmt.setLong(2, 10001);
pstmt.executeUpdate();
```
führt den SQL-Befehl


```
UPDATE Artikel SET Aktiv=1 WHERE Artikelnummer = 10001
```
aus. Nun ist das Feld "Aktiv" ist in der DB vom Typ "smallint", und bei *true* muss der Wert = -1 sein. Alles was != -1 ist, wird als *false* gewertet.

Kann man die Behandlung von Boolean irgendwie beeinflussen oder muss man sich selber drum kümmern, es z.B. durch

```
pstmt.setByte(1, value ? -1 : 0));
```
ersetzen?

Grüße

Egon Schmid


----------



## Gast2 (3. Feb 2012)

javabar hat gesagt.:


> Der folgende Code
> 
> 
> ```
> ...



Welche DB? Warum muss der Wert -1 sein? 
1=true 0=false


----------



## HimBromBeere (3. Feb 2012)

Wäre mir neu, dass boolean was anderes interpretieren kann als "0" und "nicht 0". Um diese Interpretation musst du dich schon selbst kümmern...


----------



## javabar (3. Feb 2012)

Auf der DB (MS SQL) läuft ein Warenwirtschaftssystem, das ist halt sch***** entwickelt mit Access, und bei dem ist halt -1 = true und 0 = wahr.


----------



## Gast2 (3. Feb 2012)

???:L





javabar hat gesagt.:


> Auf der DB (MS SQL) läuft ein Warenwirtschaftssystem, das ist halt sch***** entwickelt mit Access, und bei dem ist halt -1 = true und 0 = wahr.



0 = wahr und -1 = true ???:L

Ja entweder du machst ein update in deinen Tabellen und ziehst das gerade oder du musst es selber handeln...


----------



## Gast2 (3. Feb 2012)

javabar hat gesagt.:


> Kann man die Behandlung von Boolean irgendwie beeinflussen oder muss man sich selber drum kümmern, es z.B. durch
> 
> ```
> pstmt.setByte(1, value ? -1 : 0));
> ...



Da wird dir keine andere Wahl bleiben. Das funktioniert doch so, sollte also kein Problem sein, obwohl ich wohl setInt nehmen würde.

Alternativ und sehr aufwändig:

PreparedStatement selber implementieren und setBoolean überschreiben


----------

