tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
4223
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Hi,

    Nach unzäligen Stunden Fehlersuche wende ich mich jetzt an das Forum:

    Code :
    1
    2
    3
    4
    5
    
        int iCounter = 0;
        while(objReSet.next()){
          arMyTableCells[iCounter][0] = new MyTableCells(objReSet.getInt(this.I_CALL_CALL_NR));
          iCounter++;
        }

    (objReSet = ein ResultSet-Objekt)

    Eigentlich sollte ein Datensatz nach dem anderen in das Array geschrieben werden. Aber durch System.Out's kann man sehen, dass die Schleife nur einmal durchlaufen wird. Lösch ich die Zeile "arMyTableCells[iCounter][0] = new MyTableCells(objReSet.getInt(this.I_CALL_CALL_NR));", dann läuft die Schleife komischer Weiße so oft durch, wie es Datensätze gibt. Fast den gleichen Code habe ich funktionierend in einem anderen Projekt, nur dass ich dort keinen Int sondern ein Objekt aus dem ResultSet hohle.

    Hat jemand eine Idee?
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  2. #2
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Nicht dass jetzt noch jemand fragt: Ja es sind genügend korrekte Datensätze vorhanden!
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  3. #3
    wsl Tutorials.de Gastzugang
    Hallo,

    versuch doch mal das ganze etwas aufzusplitten (falls du das eh nicht schon getan hast).
    Zum Beispiel zuerst nur ein
    Integer i = objReSet.getInt(0);
    in der Schleife durchführen und gucken ob es hinhaut.
    Dann ein
    MyTableCells cell = new MyTableCells(i);
    usw...

    So kannst du das Problem wenigstens mal etwas eingrenzen
     

  4. #4
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
        int iCounter = 0;
        int iTemp = 0;
        while(objReSet.next()){
          iTemp = objReSet.getInt(this.I_CALL_CALL_NR);
          MyTableCells cell = new MyTableCells(iTemp);
          arMyTableCells[iCounter][0] = cell;
          iCounter++;
        }

    Wenn ich diese Zeile: MyTableCells cell = new MyTableCells(iTemp); rauskommentiere, dann durchläuft er die Schleife in korrekter Anzahl. Allerdings hat die Klasse MyTableCells keinen Einfluss auf das ResultSet oder den Counter. Wieso also durchläuft er die Schleife dann nur 1 mal?
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  5. #5
    wsl Tutorials.de Gastzugang
    Fliegt da irgendwo eine Exception und du fängst die mit einem leeren catch ab? Führt er den Code unter dem MyTableCells cell = new MyTableCells(iTemp); noch aus?

    Was macht der Konstruktor von MyTableCells?
     

  6. #6
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    /**
       * Konstruktor
       */
      public MyTableCells(int _iCallNumber) {
        try{
          this.iCallNumber = _iCallNumber;
          this.jbInit();
        }catch(Exception ex){ex.printStackTrace();}
      }

    Ich habe keinen leeren catch. jbInit() initialisiert alle Komponennten (Klasse stellet ein JPannel mit Inhalt dar).
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  7. #7
    kaMii Tutorials.de Gastzugang
    Ich revidiere mal meine Aussage, habe den Beitrag nochmal genau durchgelesen.

    Aber wie wäre es wenn du dir erst mal ein Objekt rausholst und das dann auf Int castest?
    Geändert von kaMii (15.01.08 um 11:43 Uhr)
     

  8. #8
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Ja ich habe in der API nachgelesen und das suspekte, in meinem MySQL Explorer den ich programmiert habe funktioniert dies genauso. Nein dieses ResultSet belege ich nicht neu.

    Hier noch mehr Code:

    Methode die die Daten für die Tabelle erstellt (in der Klasse in der die Tabelle erstellt wird):
    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
    25
    26
    27
    28
    29
    30
    31
    
     //Erstellt die Daten fr die Tabelle
      private MyTableCells[][] createTableData() throws Exception{
        ResultSet objReSet = null;
        ResultSet objReSet2 = null;
        int iRowCount = 0;
        if(this.jtpCallType.getSelectedIndex() == this.I_INNCOMING_CALL){
          objReSet2  = DBConnection.objStat.executeQuery("SELECT COUNT(*) FROM Call WHERE CallDirection = " + this.I_INNCOMING_CALL + ";");
          objReSet2.next();
          iRowCount = objReSet2.getInt(1);
          objReSet  = DBConnection.objStat.executeQuery("SELECT * FROM Call WHERE CallDirection = " + this.I_INNCOMING_CALL + ";");
        }
        else{
          objReSet2  = DBConnection.objStat.executeQuery("SELECT COUNT(*) FROM Call WHERE CallDirection = " + this.I_GOING_OUT_CALL + ";");
          objReSet2.next();
          iRowCount = objReSet2.getInt(1);
          objReSet = DBConnection.objStat.executeQuery("SELECT * FROM Call WHERE CallDirection = " + this.I_GOING_OUT_CALL + ";");
        }
     
        MyTableCells arMyTableCells[][] = new MyTableCells[iRowCount][1];
        System.out.println("iRowCount:  " + iRowCount);
        int iCounter = 0;
        int iTemp = 0;
        while(objReSet.next()){
          iTemp = objReSet.getInt(this.I_CALL_CALL_NR);
          MyTableCells cell = new MyTableCells(iTemp);
          arMyTableCells[iCounter][0] = cell;
          iCounter++;
        }
        System.out.println("iCounter: " + iCounter);
        return(arMyTableCells);
      }

    Klasse MyTableCells:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    
    package anrufsarchiv;
     
    import java.util.*;
    import javax.swing.*;
    import java.sql.*;
    import info.clearthought.layout.*;
    import javax.swing.border.*;
    import java.awt.*;
     
    /**
     * berschrift:   Anrufsarchiv
     * Beschreibung:
     * Copyright:     Copyright (c) 2007
     * Organisation:  HWI
     * @author Knoblach Matthias
     * @version 1.0
     */
     
    public class MyTableCells extends JPanel implements MyIcons, FieldKeys{
     
      private double arLayoutRows[] = {TableLayout.FILL}; //Die Reihen des TableLayouts
      private double arLayoutColumns[] = {20, 50, 50, TableLayout.FILL}; //Die Spalten des TableLayouts
      private TableLayout objMyTableLayout = new TableLayout(arLayoutColumns, arLayoutRows);//Erstellen des Table Layouts
      private int iCallNumber;
     
      JLabel jlblIconField     = new JLabel();
      JLabel jlblDateTime      = new JLabel();
      JLabel jlblDialogPartner = new JLabel();
      JLabel jlblReason        = new JLabel();
     
      /**
       * Konstruktor
       */
      public MyTableCells(int _iCallNumber) {
        try{
          this.iCallNumber = _iCallNumber;
          this.jbInit();
        }catch(Exception ex){ex.printStackTrace();}
      }
     
      /**
       * Initialisierung alle Komponennten
       */
      private void jbInit() throws Exception{
     
        //Umrandung der Labels setzen
        this.setAllBorder();
     
        //Labels mit Inhalt fllen
        this.fillLabels();
     
        //Komponenten hinzufgen
        this.add(this.jlblIconField, "0,0");
        this.add(this.jlblDateTime, "1,0");
        this.add(this.jlblDialogPartner, "2,0");
        this.add(this.jlblReason, "3,0");
     
      }
     
      private void fillLabels() throws Exception{
        ResultSet objReSet = DBConnection.objStat.executeQuery("SELECT * from Call WHERE CallNr = " + this.iCallNumber + " ;");
        objReSet.next();
     
        //Priorits-Label
        this.jlblIconField.setIcon(this.arIcons[objReSet.getInt(this.I_CALL_PRIORITY)]);
     
        //Datum und Uhrzeit Label
        String strTime = objReSet.getTime(this.I_CALL_CALL_TIME).toString();
        strTime = strTime.substring(0, strTime.lastIndexOf(":"));
        this.jlblDateTime.setText(createTimeDateText(objReSet.getTime(this.I_CALL_CALL_TIME), objReSet.getDate(this.I_CALL_CALL_DATE)));
     
        //Namens-Label
        this.jlblDialogPartner.setText(objReSet.getString(this.I_CALL_DIALOG_PARTNER_TOKEN));
     
        //Grund-Label
        this.jlblReason.setText(objReSet.getString(this.I_CALL_REASON_TOKEN));
      }
     
      /**
       * Gibt einen String zurck, der die bergebene Uhrzeit und das bergebene
       * Datum formatiert zurckgibt
       */
      private String createTimeDateText(Time _time, java.util.Date _date){
        String strTime = _time.toString();
        strTime = strTime.substring(0, strTime.lastIndexOf(":"));
        Calendar calDatum = Calendar.getInstance(TimeZone.getTimeZone("ECT"), new Locale("de", "DE"));
        calDatum.setTime(_date);
        String strDate = String.valueOf(calDatum.get(Calendar.DAY_OF_MONTH)) + "." +
                 String.valueOf(calDatum.get(Calendar.MONTH) + 1) + "." +
                 String.valueOf(calDatum.get(Calendar.YEAR));
        return(strTime + " - " + strDate);
      }
     
      //Hier werden die Umrandungen fr die Komponennten gesetzt
      private void setAllBorder(){
        Border objMyRaisedBorder = BorderFactory.createLineBorder(Color.black,1);
     
        this.jlblIconField.setBorder(objMyRaisedBorder);
        this.jlblDateTime.setBorder(objMyRaisedBorder);
        this.jlblDialogPartner.setBorder(objMyRaisedBorder);
        this.jlblReason.setBorder(objMyRaisedBorder);
      }
    }I
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  9. #9
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Sorry hab jetzt erst gelesen, dass du deinen Beitrag geändert hast.

    Leider klappt deine Idee mit dem Objekt auch nicht
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  10. #10
    kaMii Tutorials.de Gastzugang
    Wo wird die statische Variable "I_CALL_CALL_NR" deklariert? Bzw. mit was oder wo wird sie neubelegt?
     

  11. #11
    wsl Tutorials.de Gastzugang
    Ich weiß zwar nicht ob es was bringt, aber du könntest mal versuchen dieses jbInit() erst nach der while-Schleife aufzurufen.
    Also quasi eine zweite Schleife die das jbInit() für jedes MyTableCells-Objekt aufruft. Setzt halt voraus, dass es public is...

    Oder du speicherst dir die ganzen int-Werte in einem Array und erzeugst die MyTableCells komplett in einer zweiten Schleife.
     

  12. #12
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Zitat Zitat von kaMii Beitrag anzeigen
    Wo wird die statische Variable "I_CALL_CALL_NR" deklariert? Bzw. mit was oder wo wird sie neubelegt?
    In einem Interface, darin liegts aber nicht. Ist nur eine Konstante, die eine Zahl enthält (1) um auf das erste Feld (CallNr) zuzugreifen.


    Zitat Zitat von wsl
    Oder du speicherst dir die ganzen int-Werte in einem Array und erzeugst die MyTableCells komplett in einer zweiten Schleife.
    Bin ich schon längst drann
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  13. #13
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Ok jetzt funktionierts. Und zwar mit der Methode von wsl. Danke für eure geopferte Zeit.
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

Ähnliche Themen

  1. MySql Datenbank auslesen
    Von dumbaz28 im Forum .NET Web und Kommunikation
    Antworten: 6
    Letzter Beitrag: 31.12.09, 14:01
  2. Notes Datenbank mit java auslesen?
    Von Ryu20 im Forum Java
    Antworten: 2
    Letzter Beitrag: 17.12.08, 08:40
  3. In C MySQL Datenbank auslesen
    Von Limitsunknown im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 04.11.07, 19:11
  4. Antworten: 3
    Letzter Beitrag: 24.08.07, 17:14
  5. Auslesen aus MySql datenbank
    Von Nickel im Forum PHP
    Antworten: 2
    Letzter Beitrag: 19.02.02, 18:18