-
04.07.11 11:42 #1
- Registriert seit
- Jun 2011
- Beiträge
- 119
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:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
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
-
04.07.11 11:51 #2SE Tutorials.de Gastzugang
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 ...
-
04.07.11 12:19 #3Die 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.Muss ich das jetzt über die Textfelder machen oder über die ComboBox auswahl?Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
04.07.11 12:40 #4
- Registriert seit
- Jun 2011
- Beiträge
- 119
@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
-
04.07.11 12:48 #5Du 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...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
Code java:1 2 3
//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");
Geändert von HonniCilest (04.07.11 um 12:53 Uhr)
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
04.07.11 15:21 #6
- Registriert seit
- Jun 2011
- Beiträge
- 119
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 !
-
04.07.11 15:52 #7
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!):
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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(); } }
Geändert von HonniCilest (04.07.11 um 16:13 Uhr) Grund: Beispiel hinzugefügt
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
05.07.11 10:23 #8
- Registriert seit
- Jun 2011
- Beiträge
- 119
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)Geändert von Alex Großmann (05.07.11 um 10:32 Uhr)
-
05.07.11 11:05 #9
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.Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
05.07.11 11:16 #10
- Registriert seit
- Jun 2011
- Beiträge
- 119
Habe es jetzt so:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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:
Code java:1
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 <.<
-
05.07.11 12:21 #11
- Registriert seit
- Jun 2011
- Beiträge
- 119
Problem gelöst!
Ich habe die ' vergessen, d.h. er hat gar kein Wort sondern nur iwas reingeschrieben
Code :1
ResultSet rs1 = stmt2.executeQuery("select * from IP where Bereichname = ".concat("'"+wahl+"'"));
(hab in Wahl das ComboBox Item gespeichert, ist zwar überflüssig aber naja
)
-
05.07.11 12:21 #12
Es könnte ich sein, dass das SQL statement falsch ist, wie gesagt ich bin da nicht so fit. Ich würde erstmal probieren vor und nach dem = das Leerzeichen zu entfernen.
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
05.07.11 12:29 #13SE Tutorials.de Gastzugang
Das SQL-Statement ist definitiv FALSCH !
Weil eine Tabelle "IP" kann es nicht geben ... die meisten DB-Systeme erlauben wenn überhaupt nur den ERSTEN Buchstaben groß .. einige auch nur alles klein.
Außerdem musste du Quoten ... wenn überhaupt müsste dein Statement so aussehen :
Warum du hier concat() verwendest verschweigt sich mir -.-'Code :1
"SELECT * FROM `ip` WHERE `identifier`='value'"
btw : kannst du mir mal bitte wirklich schreiben was du eigentlich machen willst ?
Einen Scanner / Pinger über eine IP-Range ... LASS ES ... dafür gibt es fertige Programme die eine deutlich höhere Performance haben. Außerdem ist es einfach nur ein unnötiger Aufwand das in ne DB zupacken ... anstatt du einfach zwei JTextField machst und den User es einfach eintragen lässt. Ich denke du hast da schwerwiegende Konzeptions- und Denkfehler bei dem was du da eigentlich vorhast ... mir verschweigt es sich immer noch ...
-
05.07.11 12:56 #14
- Registriert seit
- Jun 2011
- Beiträge
- 119
Die Tabelle heißt wirklich so... hab sie in ip umbenannt.
Wenn ich es so mache wie du es beschreibst gehts leider nicht (vorher gings wirklich!).
Da sagt er das er keinen Parameter bekommt, und daher hab ich auch concat genutzt, damit der String direkt an den Anfanfsstring angehangen wird.
Ich habe mein Wissen damit wie immer aus Java is auch eine Insel ect. und überall wird der Tabellennamme net in Hochkommas gehüllt, das wusst ich daher noch nicht
Danke
Ich schreibs heute Abend! Ich stand gestern im Stau und hatte dannach keine Lust mehr an den PC zu gehen x.x...
-
05.07.11 13:01 #15SE Tutorials.de Gastzugang
Gut .. vielleicht währen dann etwas mehr Infos *z.B. welches DB-System und welchen Driver* sinnvoll. Das oben genannte Statement ist für MySQL und funktioniert super.
Außerdem : wenns bei dir mit nem SQL-Konformen Statement zu Fehlern führt versuch mal PreparedStatements.
Ähnliche Themen
-
JComboBox
Von Olfipolfi im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 14.05.10, 22:36 -
JComboBox
Von flipo84 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 27.04.07, 12:28 -
JcomboBox(2)
Von girl2005 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 28.07.05, 08:35 -
JComboBox
Von girl2005 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 11Letzter Beitrag: 24.07.05, 00:14 -
JComboBox
Von Serethos im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 8Letzter Beitrag: 05.11.04, 15:38



8Danke

Zitieren
Login





