# Problem mit ArrayList<String> und Umlauten



## BlackC (30. Aug 2011)

Hallo Javagemeinde,

ich hab mal wieder ein seltsames Problem. Ich lese aus einer MS SQL Server 2008 R2 -Datenbank eine Tabelle aus, die unsere Bundesländer enthält, und zwar wie folgt:


```
public  ArrayList<String > getAllFederalState(){
         ArrayList< String > list = new  ArrayList< String >();
         try
         {
            String command = "EXEC [dbo].[usp_getAllFederalState] ";

            ResultSet rs = stmt.executeQuery(command);
            while(rs.next())
            {
                list.add(rs.getString("Land"));
            }
        }
        catch(SQLException se)
        {
            JFrame frame = new JFrame();
            String message = se.getMessage();
            JOptionPane.showMessageDialog(frame, message,"ERROR by getting federal state data ", JOptionPane.ERROR_MESSAGE);
        }
        return list;
     }
```

Wenn ich jetzt aber mit der ArrayList weiterarbeite, hab ich festgestellt, dass nach einem ü (bsp. Baden-Württemberg) ein Leerzeichen eingefügt wird (steht also "Baden-Wü rttemberg" in der ArrayList).
Nach Tests hab ich den Fehler darauf begrenzt, dass der String beim einfügen in der Liste ("list.add() ") verändert wird. Aus der Datenbank wird er richtig ausgelesen. 

Weiß zufällig einer Rat? 

MFG
BlackC


----------



## SamHotte (30. Aug 2011)

Sicher, dass das Leerzeichen im 
	
	
	
	





```
rs.getString("Land")
```
 nicht schon drin ist? Trenne doch mal die beiden Befehle.


----------



## BlackC (30. Aug 2011)

SamHotte hat gesagt.:


> Sicher, dass das Leerzeichen im
> 
> 
> 
> ...



Danke für deine Hilfe, das hab ich jedoch bereits getan. Wenn ich die Befehle wie folgt trenne


```
...
while(rs.next())
            {
                String x  = rs.getString("Land");
                list.add(x);
            }
...
```

steht im x "Baden-Württemberg", schau ich aber nach dem hinzufügen während dem debuggen in die List, steht da "Baden-Wü rttemberg". ;(


----------



## nillehammer (30. Aug 2011)

Die add-Methode von ArrayList macht sowas nicht. Ich halte es für ausgeschlossen, dass der Fehler dort liegt. Ich würde eher vermuten, dass der Debugger den String falsch ausgibt. Siehst Du mit System.out.println das gleiche Verhalten?

Und dann noch ein kleiner Verbesserungsvorschlag für Deine Methode
[Java]
public  List<String> getAllFederalState(){
  List<String> list = new  ArrayList<String>();
  ...
[/Java]


----------



## SamHotte (30. Aug 2011)

Komisch ... ich hätte vermutet, dass der DB-Treiber ein Umlaut-Problem hat, denn die JVM sollte eigentlich keines haben. Beim Einfügen in die Datenbank gab's keine Probleme?


----------



## BlackC (30. Aug 2011)

SamHotte hat gesagt.:


> Komisch ... ich hätte vermutet, dass der DB-Treiber ein Umlaut-Problem hat, denn die JVM sollte eigentlich keines haben. Beim Einfügen in die Datenbank gab's keine Probleme?



Ich hab die Daten mit dem SQL Server Management in die Tabelle eingefügt, daher kann ich nur sagen, das bei anderen Methoden die Umlaute richtig hingeschrieben werden.

@nillehammer: Herzlichen Dank für deinen Tipp  Ich hab das x sowie den jeweiligen list-wert mit system.out.println ausgegeben und beides mal ist an der Stelle des Leerzeichen ein "?", was meines Wissens nach ein Fehler mit dem Unicode sein soll. Allerdings weiß ich nicht, wie ich das umgehen kann. In der Datenbank ist es ein nvarchar, welches nach der Doku UTF-8 sein soll. Wie muss ich das konvertieren bzw. was kann ich machen? 

PS.: Trotzdem find ich es komisch,dass sowas Netbeans nicht richtig anzeigt ...:bahnhof:


----------



## SamHotte (30. Aug 2011)

Dieses "SQL Server Management" kenne ich nicht, aber evtl muss man dem DB-Zugriff (auch beim Schreiben) erst deutsch beibringen ... Ich kenne diesen Effekt bislang nur von Textdateien, da muss man manchmal von ASCII auf ANSI oder UTF-8 umstellen.

Probier' doch mal, die Werte von Deinem Java-Prog aus selbst in die DB hineinzuschreiben.


----------



## nillehammer (30. Aug 2011)

Es hängt vom verwendeten DBMs ab, was man machen muss, um UTF8 einzuschalten. Bei MySql kann man beim Create-Stagement angeben, dass der Zeichensatz für die Tabelle oder gar die ganze DB UTF8 sein soll. Darüber hinaus gibt es einen jdbc-Connection-Parameter "enccoding" den man auf UTF8 setzen muss. Ähnliches gibt es bestimmt auch bei anderen Datenbanken.


----------



## BlackC (31. Aug 2011)

So, ich hab jetzt etwas rumexperimentiert und herausgefunden, dass wenn ich selber etwas in utf-8 hineinschreibe und es dann mit "getString" auslese, wird es richtig angezeigt. Desweiteren scheint es nur an dieser einen Tabelle zu liegen, da andere Tabellen mit Umlauten kein Problem haben ???:L

Die Tabelle hab ich mit anderen Tabellen verglichen und kein Unterschied festgestellt, außer dass ich die funktionierende Tabellen aus sql erstellt habe und die Tabelle "Bundesland" mit Hilfe des SQL-Server Managementsystem". Werd jetzt mal auch diese Tabelle automatisch generieren. Ansonsten bin ich mit meinem Latein langsam am Ende. ;(


EDIT: Das Problem lag wirklich an dem manuellen erstellen der Tabelle. Nachdem ich ein SQL-Script geschrieben habe und meine aktuelle Tabelle ersetzt habe, wirds richtig ausgelesen. Was mich noch interessieren würde ist, ob dass ein Bug bzw. von meiner Seite nur falsch konfiguriert ist. 
Nochmal bei allen herzlichen Dank für eure Hilfe


----------

