# JList /DefaultListModel mit Datenbank verbinden



## Einklang. (3. Jul 2012)

So heute bekomm ich eine Fehlermeldung da eine Liste nicht zu befüllen geht:


```
DefaultListModel listModel = new DefaultListModel(); 
       JList list_1 = new JList(listModel);
		list_1.setBounds(282, 175, 119, 106);
		
		Statement lokaldb = ButtonDBTablezweite.getInstance().connection.createStatement();
		ResultSet res = lokaldb.executeQuery("Select * from tabelleninfos");    
		int id_tab = res.getInt(1);
		String variable = res.getString(2);
		
	    
		 while (res.next())
		{
			listModel.addElement();
		} 
		
		JScrollPane listscroll_1 = new JScrollPane(list_1);
		listscroll_1.setBounds(100, 100, 100, 100);
		
		listscroll_1.setVisible(true);
		panel_1.add(listscroll_1);
```

in der while-Schleife habe ich geschrieben "listMode.addElement(variable);" aber das bringt ne sql Exception (wird alles unterringelt, fange sie nicht auf daher kann ich nichts näheres dazu sagen)......!

Es scheint jedenfalls so nicht zu funktionieren und die Frage ist warum?
Wenn ich die Inhalte von Hand fest reinprogrammiere werden sie angezeigt - also zb. "listModel.addElement("Hallo"); "

Danke


----------



## vanny (3. Jul 2012)

```
DefaultListModel listModel = new DefaultListModel(); 
       JList list_1 = new JList(listModel);
        list_1.setBounds(282, 175, 119, 106);
        
        Statement lokaldb = ButtonDBTablezweite.getInstance().connection.createStatement();
        ResultSet res = lokaldb.executeQuery("Select * from tabelleninfos");    
       
        
        
         while (res.next())
        {
            int id_tab = res.getInt(1);
            String variable = res.getString(2);
            listModel.addElement(variable);
        } 
        
        JScrollPane listscroll_1 = new JScrollPane(list_1);
        listscroll_1.setBounds(100, 100, 100, 100);
        
        listscroll_1.setVisible(true);
        panel_1.add(listscroll_1);
```

Man könnte hier auch noch einiges eleganter lösen und das ResultSet und die Connection sollten iwie geschlossen werden. (tryByResource oder manuell). Aber dein Hauptproblem ist wohl das, was ich mal geändert hab.

Gruß Vanny


----------



## Einklang. (3. Jul 2012)

Hm danke aber jetzt bin ich nicht viel schlauer und die Anspielung habe ich auch nicht so richtig verstanden, da das mein erster Beitrag zu der JList ist! ;-)


----------



## vanny (3. Jul 2012)

dann poste mal bitte deine SQLException! Aus deinem gezeigten Code ist der Fehler für mich nicht ersichtlich.


----------



## Einklang. (3. Jul 2012)

ok ich hab das jetzt gemacht:


```
(Zeile 442) Statement lokaldb = ButtonDBTablezweite.getInstance().connection.createStatement();
		ResultSet res = lokaldb.executeQuery("Select * from tabelleninfos");    
		try
		{
		   int id_tab = res.getInt(1);
		   String variable = res.getString(2);
		   // Hier weiter coden, denn außerhalb des try-blocks sind die Variablen nicht gültig!
		   while (res.next())
			{
				listModel.addElement(variable);
			}
		   
		} catch (SQLException ex) {
		   System.out.println("SQL-Exception ist aufgetreten: " + ex.getMessage());
		}
```

und bekomm folgende Fehlermeldung:



> Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems:
> Unhandled exception type SQLException
> Unhandled exception type SQLException
> 
> ...



Zeile 442 ist die erste Zeile vom Code....!


----------



## vanny (3. Jul 2012)

```
while (res.next())
```
das besagt ja schon, dass dein ResultSet mehrere Records/Datensätze hält.
dementsprechend muss 
	
	
	
	





```
String variable = res.getString(2);
```
 auch innerhalb des while-loops ausgeführt werden, da dieser ja so oft wiederholt wird, bis res keinen Eintrag mehr hat.

Schau noch mal die Handhabung von SQLabfragen an, so wird datt nüx.

ob das nun der Grund ist, dass der CompileError fliegt kann ich dir nicht sagen, is immerhin erst Zeile 442 ^^

Gruß Vanny


----------



## Fab1 (3. Jul 2012)

Mh.


```
connection
```
 ist eine statische Variable vom Typ Connection nehm ich mal an?


----------



## Einklang. (3. Jul 2012)

Ok habs gelöst besten dank!


----------



## vanny (3. Jul 2012)

Öhm, dann lass uns doch mal an dem Wunder teilhaben und alle anderen, die in Zukunft dieses Problem haben und hier reinschaun!


----------



## Einklang. (3. Jul 2012)

Ja gerne: 


```
DefaultListModel listModel = new DefaultListModel(); 
       JList list_1 = new JList(listModel);
		list_1.setBounds(282, 175, 119, 106);
		
		    
		try
		{
			ButtonDBTablezweite inst = ButtonDBTablezweite.getInstance();
			inst.createConnection(); // Herstellung der Verbindung
			Statement lokaldb = inst.connection.createStatement();
			ResultSet res = lokaldb.executeQuery("Select * from tabelleninfos");
		   // int id_tab = res.getInt(1);
		   
		   while (res.next())
			{
			   String variable = res.getString(2);
			   // vergleiche variable mit der aktuellen listModell
			   if (listModel.equals(variable)) {
				   System.out.println("Tabelle schon vorhanden");
			   }
			   else {
				   listModel.addElement(variable);
			   }
				
			}
		   
		} catch (SQLException ex) {
		   System.out.println("SQL-Exception ist aufgetreten: " + ex.getMessage());
		}
```

Leider funktioniert der Abgleich innerhalb der while-Schleife noch nicht...........! Es wird zwar keine Fehlermeldung angegeben, aber die Daten sind dennoch doppelt vorhanden - equals(variable) scheint nicht zu funktionieren...!


----------



## Einklang. (4. Jul 2012)

Ok eine Lösung gefunden, jetzt wird auch geprüft ob die variable in der Liste ist!

Einfach im obigen Code die While-Schleife damit ersetzen:


```
while (res.next())
			{
			   String variable = res.getString(2);

			   if (listModel.contains(variable)) {
				   System.out.println("Tabelle schon vorhanden");
			   }
			   else {
				   listModel.addElement(variable);
			   }
			   
			}
```


----------

