Jlist dynamisch aus Datenbank füllen

ifkgn

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


Java:
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());
        }
    }
 
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.
 
ja genau, habe mir jetz ein feld erstellt:

Java:
String [] ListArray;

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

Java:
 ListArray[rs];

aber das funktioniert natürlich nicht, kannst du mir weiterhelfen?
 
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.
 
Java:
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.
 
Java:
  while(rs.next()){
                data.add(rs.getString(2));
            }

in der while schleife bietet er mir nicht nach data. die add methode an!?
 
Du musst natürlich auch eine ArrayList namens "data" deklarieren bevor du die Methode aufrufst.

Java:
 public class BLA {
 
private ArrayList data;


public void doSomething(){}
 .......
.......
.......
}
 
Code:
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
 
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
 
Java:
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());
        }
   
 
    }
 
In Zeile 48 ist ein Fehler es heist
Java:
 new DefaultComboBoxModel()
.

Des Weiteren seh ich nirgendswo das du eine Instanz deiner data Liste erstellst, in der Methode initJList musst du auch
Java:
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.
 
danke erstmal jetz hab ich nur noch einen fehler


Java:
 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;
 

Neue Themen


Zurück
Oben