tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
23
ZUGRIFFE
1313
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Hallo!
    Ich möchte eine Collection mit mehreren Objekten Füllen!
    Die Objekteigenschaften werden aus einer MySql Datenbank ausgelesen
    und gespeichert!
    Jedes mal wenn mein Resultset in der Datenbank auf ein Feld mit einem Null
    Wert stost ist es vorbei.
    Vielleicht kann mir ja jemand helfen!
     

  2. #2
    Registriert seit
    Mar 2001
    Ort
    München
    Beiträge
    4.785
    Code :
    1
    2
    
    if(rs.getString("spalte")!=null)
               collection.add(rs.getString("spalte"));

    Oder was willst du genau?!
     
    Erst wenn der letzte Programmierer eingesperrt...
    ...und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
    -------------------
    chris: hey Tom hast du eigentlich ne Freundin
    jdar: ich bin tutorials.de Mod!

  3. #3
    Avatar von teppi
    teppi teppi ist offline Mitglied Platin
    Registriert seit
    May 2004
    Ort
    Berlin
    Beiträge
    537
    Hm ich weiss jetzt nicht genau was du mit " ist es vorbei" meinst .. Aber ResultSet hat die Methode:

    public boolean wasNull()

    .. Mit der kann man sicher eine entsprechende Abfrage machen und solche Werte abfangen.
     
    :-) möp

  4. #4
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Ich hab das mal gleich ausprobiert!
    bei mir würde das so aussehen!

    if (rse.getString("PersNr")!= null)
    {
    benutzerstamm.setPersNr(rse.getString("PersNr"));
    }

    Mit dem Vorbei meine ich dass dann die NullPointerException kommt!

    Noch ein paar infos benutzerstamm enthält alle eigenschaften eines Mitarbeiter
    in einer Firma! Praktisch eine Mitarbeiterverwaltung!

    jetzt noch eine Frage:

    Würdet ihr eine LinikedList einen Array oder Collection ...
    nehmen um alle Mitarbeiter speichern zu können?

    Danke für die super schnelle Antwort!
    Chris
     

  5. #5
    Registriert seit
    Feb 2004
    Beiträge
    592
    Kann es sein, dass du eine NullPointerException bekommst? Die genau Fehlermeldung weiß ich nicht mehr, aber im Wortlaut könnte es "after result set is closed...." sein.

    Diese Exception bekommst du wenn du entweder das ResultSet Object, das Statement Object oder die Connection mit .close() beendest.

    Mit dem ResultSet arbeitest du, soviel ich weiß, direkt mit der/auf der Datenbank.

    Gruß

    Romsl
     

  6. #6
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Noch was kann ich mir da nicht eine Methode schreiben die mir das überprüft ob ein Feld in der Datenbank NULL ist?
    Weil ich ungefähr 20 Felder überprüfen muss!
    Das ist ein bisschen Redundant!*g*

    Chris
     

  7. #7
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Nein eine Solche NullPointerException bekomme ich nicht!
    ich bekomme die Fehlermeldung erst in der While schleife in der ich das Resultset durchlaufe, und wenn das ResultSet auf einen Null Wert in der Datenbank stöst!
    Chris
     

  8. #8
    Registriert seit
    Feb 2004
    Beiträge
    592
    Du kannst dir die Anzahl der Spalten auslesen.

    Code :
    1
    2
    3
    4
    
    Statement stmt = con.createStatement();
    ResultSet data = stmt.executeQuery("SELECT * FROM tabelle");
    ResultSetMetaData metaData = data.getMetaData();
    int columns = metaData.getColumnCount();

    Und in der while Schleife eine for Schleife legen, die so lange läuft wie du Spalten hast.

    Gruß Romsl
     

  9. #9
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Und was bringt mir die for Schleife?
    Ich möchte für jeden Mitarbeiter alle Eigenschaften in benutzerstamm speichern!
    Diese in irgendeiner Collection oder Array oder LinkedList speichern und dann
    Ausgeben! Praktisch alle Mitarbeiter mit allen Eigenschaften!

    Das mit dem

    if (rse.getString("Name_Zusatz") != null)
    {
    benutzerstamm.setNameZusatz(rse.getString("Name_Zusatz"));
    }

    funktioniert einwandfrei!

    Aber jetzt bräuchte ich noch Hilfe wie ich und wohin ich alle Mitarbeiter hinspeichere damit ich sie später ausgeben oder weiterverarbeiten kann!

    Danke
    Chris
     

  10. #10
    Registriert seit
    Feb 2004
    Beiträge
    592
    Eine LinkedList ist im weitesten Sinne eine Collection. LinkedList implementiert List und List wiederrum ist abgeleitet von Collection.

    Wenn du eine LinkedList verwendest musst du eben darauf achten wenn du einen solchen NULL Wert bekommst diesen (oder einen leeren String "") in die Liste mit aufzunehmen.

    Vorteil der Liste ist, dass du keine feste Größe angeben brauchst und jeder Zeit neue Werte dazwischen schieben kannst. Nachteil was dich aber nicht stören wird ist der Höhere Aufwand bei der Suche nach Elementen in der Liste.

    Du könntest jede Zeile des ResultSet in eine LinkedList oder Array einlesen. Und diese List oder dieses Array wieder in eine Liste oder Array legen.
    Geschachtelte Liste. Dann hast du jeden Mitarbeiter in einer extra Liste und alle Mitarbeiter eben in einer darüberliegenden Liste.

    Das gleiche würde auch mit einem Vector funktionieren.

    Hoffe ich hab dich diesmal verstanden.

    Gruß

    Romsl
     

  11. #11
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Genau so mit der LinkedListe möchte ich das machen!
    Alle eigenschaften von jedem Mitarbeiter!
    Hast du da evtl. einen Quellcode da?
    ich weiß nicht so genau wie ich das machen soll!

    Diesmal hast du mich haargenau verstanden!
     

  12. #12
    Registriert seit
    Feb 2004
    Beiträge
    592
    Du musst noch die Importe hinzufügen.

    import java.util.*;
    import java.sql.*;

    Code :
    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 LinkedList getResultInList(ResultSet data) {
        LinkedList returnList = new LinkedList();
        
        try {
          ResultSetMetaData metaData = data.getMetaData();
          int columns = metaData.getColumnCount();
     
          //mit dem !data.wasNull() bin ich mir nicht sicher
          while (data.next() && !data.wasNull()) {
            LinkedList inList = new LinkedList();
            
            for (int i = 1; i <= columns; i++) {
                inList.add(data.getObject(i));
            }
            
            returnList.add(inList);
          }
        }
        catch (SQLException e) {
          e.printStackTrace();
        }
     
        return returnList;
      }
     

  13. #13
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Danke
    ich werd ausprobieren!
    Chris
     

  14. #14
    Happymaker Happymaker ist offline Mitglied Bronze
    Registriert seit
    Aug 2004
    Beiträge
    42
    Und wie kann ich jetzt wieder alles auslesen
    Wäre super wenn du da auch ein beispiel hättest!

    Chris
     

  15. #15
    Registriert seit
    Feb 2004
    Beiträge
    592
    Zur Verbesserung der Performance könntest du die Listen mit .toArray() in Arrays umwandeln (da eine Liste jedesmal von vorne beginnt durchzugehen wenn du die einzelnen Werte holst, mit einem Array kannst du gezielt Werte herauspicken).

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
      public void getListContent(LinkedList list) {
        for (int i = 0; i < list.size(); i++) {
          LinkedList inList = (LinkedList) list.get(i);
          for (int j = 0; j < inList.size(); j++) {
            System.out.println(inList.get(j));
          }
        }
      }

    Könntest du nicht direkt auf dem ResultSet arbeiten, ich meine ohne die Daten zuerst in eine Liste zu speichern und dann auszulesen?

    Hoffe es hat Dir geholfen.

    Gruß

    Romsl
     

Ähnliche Themen

  1. Dynamisches resultSet
    Von anjepieft im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 3
    Letzter Beitrag: 20.05.10, 13:04
  2. ResultSet frage
    Von Freak2k im Forum Java
    Antworten: 13
    Letzter Beitrag: 09.06.05, 07:36
  3. ResultSet
    Von illaX im Forum Java
    Antworten: 5
    Letzter Beitrag: 31.03.05, 14:59
  4. ResultSet und Schleifen
    Von Der nette Mann im Forum Java
    Antworten: 1
    Letzter Beitrag: 28.10.04, 13:37
  5. ResultSet
    Von tinella im Forum Java
    Antworten: 6
    Letzter Beitrag: 14.10.04, 12:01