Von Datenbank in die JComboBox...

Alex Großmann

Erfahrenes Mitglied
Hiho!

Ich bräuchte mal wieder dringend eure hilfe :)
Also ich möchte mich mit ner Datenbank verbinden, dort die Daten einer Spalte in die JComboBox geben. Und dann wenn Jetzt ein Name in der JComboBox angewählt wird, sollen 2 Textfelder mit jeweils den Werten "IP anfang" und "Ip ende" beschrieben werden.
Also das mit der ComboBox hab ich so gelöst:
Java:
public Vector ladestandorte() {
	Vector vec = new Vector();
	Vector vec1 = new Vector();
	
	
	try {
	  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	Connection con = DriverManager.getConnection("xxxxxxxxxxxx);

   		Statement stmt1 = con.createStatement();
   		ResultSet rs1 = stmt1.executeQuery("select * from IP");
		
   		while (rs1.next()){
   			vec.add(rs1.getString("Bereichname"));
   		 }
   	
   	
   	rs1.close();
   	stmt1.close();
   	
   	} catch (Exception e) {}

    return vec;
}

Das klappt einwandfrei, nur nun sollen eben die dazugehörigen IP Bereiche auch in die Textfelder geschrieben werden.
Muss ich das jetzt über die Textfelder machen oder über die ComboBox auswahl? Ich verstehs nicht, aber bin mir sicher das ich heut wieder viel von euch lerne =D
 
Ich frag doch noch mal : du hast ja schon einige Zeit das mit diesen IP-Ranges im Kopf ... WAS GENAU WILLST DU DAMIT MACHEN ?
Ich versteh es immer noch nich ...
 
Muss ich das jetzt über die Textfelder machen oder über die ComboBox auswahl?

Die ComboBox-Auswahl, dafür benötigst du einen ActionListener mit der entsprechenden Methode actionPerformed(). In dieser Methode beschreibst du deine Textfelder. Der ActionListener wird ausgelöst, wenn ein Element der ComboBox ausgewählt wird.
 
@Spike
Das ist relativ umfangreich, ich schreibs dir heute Abend !

Ich verstehs immernoch nicht. Wenn dann jetzt z.B. x in der ComboBox anwähle, dann müsste dann quasi im actionPerformed() eine neue Verbindung aufgebaut werden, und dann müsste der genau die Zeile auswählen wo auch das x drin stand und dann zum benachbarten Feld gehen?
o_O
 
Ich verstehs immernoch nicht. Wenn dann jetzt z.B. x in der ComboBox anwähle, dann müsste dann quasi im actionPerformed() eine neue Verbindung aufgebaut werden, und dann müsste der genau die Zeile auswählen wo auch das x drin stand und dann zum benachbarten Feld gehen?
o_O

Du musst nicht immer eine neue Verbindung aufbauen, aber du musst in actionPerformed deine Datenbankabfrage machen. Und ja, du musst den Entity finden, wo x vorhanden ist und dann dementsprechend die benachbarten Felder auswerten und dann einfach in die Textfelder schreiben. Du musst dafür nur dein Datenbank Statement erweitern...

Java:
//hoffe das ist auch korrekt formuliert, meine Datenbankkenntnisse sind recht minimal ;>
//gibt nur die Zeilen zurück, wo die Spalte, in der gesucht werden soll, x entspricht
ResultSet rs1 = stmt1.executeQuery("select * from IP where SUCHSPALTE = x");
 
Zuletzt bearbeitet:
Ich danke dir schonmal.

Ich verstehs grad trotzdem nicht :(
Also ich streiche meine Methode von oben total und mach die Abfrage nur mit dem actionPerformed()?
Dann müsst ich ja das "x" mit einer Globalen Variable ermitteln, da ja x auch y sein kann, ich weiß ja nicht was ausgewählt wurde und darüber hinaus muss es belieblig erweiterbar sein, da es später möglich sein soll noch weitere Elemente der Datenbank hinzu zufügen...?!

Danke nochmal !
 
Also ich würde es so machen:

1. Du startest dein Programm --> Du baust eine Datenbankverbindung auf, wenn das nicht klappt schließt du dein Programm wieder mit einer Meldung oder lässt nur Datenbankunabhängige Funktionen zu.

2. Du schließt dein Programm --> Du beendest deine Datenbankverbindung, wenn eine besteht.

3. Deine Methode für die ComboBox-Erstellung bleibt natürlich, allerdings nur die Datenbankabfrage, verbinden und trennen der Datenbank sollte gesondert geschehen, wie bereits erwähnt.

4. Du programmierst dir den ActionListener, welcher lediglich die Abfrage von der bestehenden Datenbankverbindung macht. Dabei suchst du alle Zeilen mit dem Wert x (Bereichname) in der Suchspalte und holst dir dann den Wert y aus dieser Zeile.

Ich hoffe du verstehst deinen eigenen Code, denn aktuell sagst du bei der Abfrage sinngemäß hole mir alle Zeilen der Tabelle IP. Dann gehst du jede Zeile durch und und holst dir den Bereichnamen für die ComboBox.

Mit der erwähnten Erweiterung des Datenbankstatements holst du dir letztendlich nur noch alle Zeilen mit x in der Suchspalte (Bereichname) und kannst dir genauso wie vorher die Werte y und z (IP Anfang und IP Ende) aus der Zeile heraussuchen.

Es könnte also etwa so aussehen (ungetestet!):
Java:
public void actionPerformed(ActionEvent ae)
{
	if(connectionExits)
	{
		Statement stmt1 = con.createStatement(); 
	       	ResultSet rs1 = stmt1.executeQuery("select * from IP where Bereichname = " + (String)combobox.getSelectedItem());
	        
		if (rs1.next()) //nur erster Eintrag
		{
			textfeld1.setText(rs1.getString("IP Anfang"));
			textfeld2.setText(rs1.getString("IP Ende"));
		}
		else
		{
			textfeld1.setText("nicht verfügbar");
			textfeld2.setText("nicht verfügbar");
		}   
   
	    
		rs1.close();
		stmt1.close();
	}
}
 
Zuletzt bearbeitet:
sieht sehr sehr gut aus, danke dir!!

Nur ein PRoblem besteht noch:
ConnectionExist geht bei mir nicht, und con.isValid(10) geht bei JDBC nicht.... was muss dahin? (also in die IF Anweisung)
 
Zuletzt bearbeitet:
ConnectionExist war bei mir nur ein Platzhalter, entweder du speicherst den Zustand in einer Variablen oder du überprüfst es an dieser Stelle (empfohlen, weil eine Verbindung ja zwischendurch unterbrochen werden kann).

Ich würde es damit probieren:
boolean isClosed()
Retrieves whether this Connection object has been closed.
 
Habe es jetzt so:
Java:
else if (arg0.getSource()==comboBox){
		
		//Verbindung erneut aufbauen (ps, geht weder mit noch ohne diesen Schritt)
		verbindungaufbau();
		 try {
			if(!con.isClosed())
			    {
					
				 		Statement stmt2 = con.createStatement(); 
			            ResultSet rs1 = stmt2.executeQuery("select * from IP where Bereichname = "+ (String) comboBox.getSelectedItem());
			            
			        if (rs1.next()) 
			        {
			            ipVontf.setText(rs1.getString("Netzanfang"));
			            ipBistf.setText(rs1.getString("Netzende"));
			        } (...)

Dann kommt folgende Exception:
Java:
java.sql.SQLException: [Microsoft][ODBC-Treiber für Microsoft Access] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.

Heißt das ich muss vorher das Item aus der ComboBox in ne Variable schreiben? Was anderes fällt mir auch nimmer ein <.<
 

Neue Beiträge

Zurück