tutorials.de Buch-Aktion 05/2012
Seite 1 von 3 123 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
37
ZUGRIFFE
889
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    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
     

  2. #2
    SE 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 ...
     

  3. #3
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    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.
     
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  4. #4
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    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
     

  5. #5
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    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...

    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)
    Alex Großmann bedankt sich. 
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  6. #6
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    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 !
     

  7. #7
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    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
    Alex Großmann bedankt sich. 
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  8. #8
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    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)
     

  9. #9
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    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.
    Alex Großmann bedankt sich. 
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  10. #10
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    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 <.<
     

  11. #11
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    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 )
     

  12. #12
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Platin
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    501
    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.

  13. #13
    SE 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 :
    Code :
    1
    
    "SELECT * FROM `ip` WHERE `identifier`='value'"
    Warum du hier concat() verwendest verschweigt sich mir -.-'

    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 ...
     

  14. #14
    Alex Großmann Alex Großmann ist offline Mitglied Gold
    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...
    Zitat Zitat von SPiKEe Beitrag anzeigen
    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 :
    Code :
    1
    
    "SELECT * FROM `ip` WHERE `identifier`='value'"
    Warum du hier concat() verwendest verschweigt sich mir -.-'
     

  15. #15
    SE 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.
    Alex Großmann bedankt sich. 

Ähnliche Themen

  1. JComboBox
    Von Olfipolfi im Forum Java Grundlagen
    Antworten: 4
    Letzter Beitrag: 14.05.10, 22:36
  2. JComboBox
    Von flipo84 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 6
    Letzter Beitrag: 27.04.07, 12:28
  3. JcomboBox(2)
    Von girl2005 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 28.07.05, 08:35
  4. JComboBox
    Von girl2005 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 11
    Letzter Beitrag: 24.07.05, 00:14
  5. JComboBox
    Von Serethos im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 05.11.04, 15:38