# Jlist dynamisch aus Datenbank füllen



## ifkgn (30. Mai 2012)

Hallo zusammen, ich versuche in eine jlist werte aus einer datenbank hineinzubekommen, aber es funktioniert nicht...



```
public void initjlist()  {

        try
        {
        initdb();  //datenbank init.  
         

            
        rs = stmt.executeQuery("Select * From Workers");
        while(rs.next())
        {
           jList1.add(rs.getString(2));
        }
        }
        catch (SQLException err) {
            System.out.println(err.getMessage());
        }
    }
```


----------



## c_sidi90 (30. Mai 2012)

Deine Fragestellung lässt viel Spielraum dafür zu hinterfragen, was genau denn nicht funktionier ? Bekommst du Fehlermeldungen ? Die Antwort lautet sicher ja, da JList keine Methode .add(String) unterstützt.

Du solltest dir also überlegen ob du deine Strings aus dem ResultSet nicht in eine Liste wie ArrayList speicherst und diese im Anschluss an deine JList übergibst.


----------



## ifkgn (30. Mai 2012)

ja genau, habe mir jetz ein feld erstellt:


```
String [] ListArray;
```

dann in der while schleife versuche ich das Resultset in das Feld zu speichern.


```
ListArray[rs];
```

aber das funktioniert natürlich nicht, kannst du mir weiterhelfen?


----------



## c_sidi90 (30. Mai 2012)

Wenn es dynamisch sein soll würd ich dir eher eine ArrayList empfehlen als ein Array, da kommt es sonst nur zu OutOfBounds Exceptions wenn man keine genauen Vorkenntnisse mit DB Programmierung hat.


----------



## c_sidi90 (30. Mai 2012)

```
private void doSomething(){
  		
  		data = new ArrayList();
  		
  		try {
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery("select * from workers");
			
			while(rs.next()){
				data.add(rs.getString(2));
			}
		
			list.setModel(new DefaultComboBoxModel<>(data.toArray()));
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
  		
  	}
```

nicht optimal da nach jeder DB-Abfrage ein neues Model erstellt wird, sollte aber keine Probleme machen.


----------



## ifkgn (31. Mai 2012)

```
while(rs.next()){
                data.add(rs.getString(2));
            }
```

in der while schleife bietet er mir nicht nach data. die add methode an!?


----------



## c_sidi90 (31. Mai 2012)

Du musst natürlich auch eine ArrayList namens "data" deklarieren bevor du die Methode aufrufst.


```
public class BLA {
 
private ArrayList data;


public void doSomething(){}
 .......
.......
.......
}
```


----------



## ifkgn (31. Mai 2012)

```
run:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at database_form.databaseframe.initjlist(databaseframe.java:68)
	at database_form.databaseframe.<init>(databaseframe.java:37)
	at database_form.databaseframe$11.run(databaseframe.java:595)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
```

bekomme jetz diese fehler meldungen


----------



## c_sidi90 (31. Mai 2012)

Poste mal die jeweiligen Codezeilen 68 und 37 oder den gesamten Codeabschnitt. Steht ja ziemlich klar des er eine NullPointerExc wirft, was das bedeutet wirst du sicherlich wissen. Ohne Code kann ich dir aber nicht sagen wieso sie geworfen wird


----------



## c_sidi90 (31. Mai 2012)

edit


----------



## ifkgn (31. Mai 2012)

```
public class databaseframe extends javax.swing.JFrame {

Connection con=null;
Statement stmt;
ResultSet rs;
int curRow=0;
private ArrayList data;
    
    
    /**
     * Creates new form databaseframe
     */
    public databaseframe() {
        
        initComponents();
        get_users();
       initjlist();
    }
    
    public void initdb()
{
        try
        {
        //Connect to the Database
        String host = "jdbc:derby://localhost:1527/Employees";
        String uName = "admin";
        String uPass= "admin";
        con = DriverManager.getConnection( host, uName, uPass );
        }
        catch (SQLException err) {
            System.out.println(err.getMessage());
        }

}
    
    public void initjlist()  {

        try
        {
        initdb();    
        stmt = con.createStatement();            
        rs = stmt.executeQuery("Select * From Workers");
        while(rs.next())
        {
            data.add(rs.getString(2));
           
        }
   
       jList1.setModel(new default ComboBoxModel<>(data.toArray));
    //    jList1.setModel(new DefaultComboBoxModel<>(data.toArray()));
        
        }
        catch (SQLException err) {
            System.out.println(err.getMessage());
        }
   
 
    }
```


----------



## c_sidi90 (31. Mai 2012)

In Zeile 48 ist ein Fehler es heist 
	
	
	
	





```
new DefaultComboBoxModel()
```
.

Des Weiteren seh ich nirgendswo das du eine Instanz deiner data Liste erstellst, in der Methode initJList musst du auch 
	
	
	
	





```
data = new ArrayList()
```
 schreiben. Das kannst du gleich als erste Zeile der Methode machen.

Auch ist es sinnlos die initDb() Methode jedesmal aufzurufen wenn du Daten aus der DB lädst. Entferne initDB() aus der initJList Methode und führe die Methode 1x im Konstruktor aus.


----------



## ifkgn (31. Mai 2012)

danke erstmal jetz hab ich nur noch einen fehler



```
jList1.setModel(new DefaultComboBoxModel<>(data.toArray()));
```

das wird mir schon rot unterstrichen, da steht Diamond operator is not supported in source 1.6 und 
cannot infer type arguments for javax.swing.defaultComboboxModel;


----------



## c_sidi90 (31. Mai 2012)

dann enferne das "<>"


----------



## ifkgn (31. Mai 2012)

ok vielen dank :toll: funktioniert jetzt


----------

