Datenbankzugriff bei "SELECT"

BloodyReaper

Grünschnabel
Hey leute...

muss von der schule aus ein Projekt in Java programmieren in DV und ... ja... die Such-funktion geht nicht... also mein problem:

1. Ich erstelle ein neues Objekt
2. Setze die Personalnummer des gewünschten mitarbeiter mit einer Set-Methode
3. gebe erstmal die daten aus um rauszufinden ob die persnummer stimmt
4. Drücke auf "Vorgesetzten Suchen"
5. Fehler kommt: "Daten in Datenbank nicht vorhanden!"

das problem ist... der gewünschte Vorgesetzter IST in der Datenbank vorhanden.

Ich programmier das Projekt in JBuilder 8 (haben wir von der schule bekommen) und benutze eine Access-Datenbank. Mit dem Projekt müssen wir auf 3 Tabellen zugreifen und die einzelnen Daten rausholen. Jedoch geht es nicht... so...

EDIT: Achja ... was ich vergessen hab... es wird der folgende Fehler in JBuilder in der Konsole angezeigt: java.sql.SQLException: No row count was produced

Meine programmierzeilen:

Code:
     public int suchen()   {

          int mMerker;

          ResultSet rsA;

          String mSQL = new String();

          mMerker = 0;

          DBZugriff aktuellerZugriff = new DBZugriff();

          if (aktuellerZugriff.oeffneDB() == true) {
            mSQL = "SELECT Mitarbeiter.Nachname, Mitarbeiter.Vorname, Angestellter.Gehalt, Vorgesetzter.Zuschlag, Vorgesetzter.HierarchieStufe ";
            mSQL = mSQL + "FROM Mitarbeiter, Angestellter, Vorgesetzter WHERE Mitarbeiter.Nr='" + getPersNr() + "';";

            System.out.println(mSQL);   // Zu Testzwecken

            rsA = aktuellerZugriff.lesen(mSQL);

            try {                         // Versuch auf den ersten Record
              rsA.next();                 //  zu gehen!
              setName(rsA.getString("Mitarbeiter.Nachname"));
              setVName(rsA.getString("Mitarbeiter.Vorname"));
              setGehalt(rsA.getDouble("Angestellter.Gehalt"));
              zuschlag = rsA.getDouble("Vorgesetzter.Zuschlag");
              hierarchieStufe = rsA.getInt("Vorgesetzter.HierarchieStufe");
            }

            catch (Exception e) {           // Kein Datensatz vorhanden!
              mMerker = 2;
            }


            if(aktuellerZugriff.aendern(mSQL) == true)
            {

            }

            else
            {
              mMerker = 2;             // SQL-Befehl ging schief
            }

            if (aktuellerZugriff.schliesseDB() == true)
            {

            }

            else  {
              mMerker = 3;             //DB-Schließen ging schief
            }


          }
          else  {
            mMerker = 1;               //DB-Öffnen ging schief
          }

          return mMerker;
        }

Folgender SQL-Befehl geht an die Datenbank:

Code:
SELECT Mitarbeiter.Nachname, Mitarbeiter.Vorname, Angestellter.Gehalt, Vorgesetzter.Zuschlag, Vorgesetzter.HierarchieStufe
FROM Mitarbeiter, Angestellter, Vorgesetzter
WHERE Mitarbeiter.Nr='007';

Ich hoffe ihr könnt mir behilflich sein... wenn ihr weitere Informationen braucht, dann fragt.

LG Micha
 
Zuletzt bearbeitet:
Ist dass das was dein System.out.println ausgegeben hat?

Wie sieht die komplette Exception aus?
 
also das was in der Konsole steht ist:

C:\Java\JBuilder\jdk1.4\bin\javaw -classpath "I:\Java\JBuilder\Projekte\J560_Mitarbeiter_JB\classes;C:\Java\JBuilder\jdk1.4\demo\jfc\Java2D\Java2Demo.jar;C:\Java\JBuilder\jdk1.4\demo\plugin\jfc\Java2D\Java2Demo.jar;C:\Java\JBuilder\jdk1.4\jre\lib\charsets.jar;C:\Java\JBuilder\jdk1.4\jre\lib\ext\dnsns.jar;C:\Java\JBuilder\jdk1.4\jre\lib\ext\ldapsec.jar;C:\Java\JBuilder\jdk1.4\jre\lib\ext\localedata.jar;C:\Java\JBuilder\jdk1.4\jre\lib\ext\sunjce_provider.jar;C:\Java\JBuilder\jdk1.4\jre\lib\im\indicim.jar;C:\Java\JBuilder\jdk1.4\jre\lib\jaws.jar;C:\Java\JBuilder\jdk1.4\jre\lib\jce.jar;C:\Java\JBuilder\jdk1.4\jre\lib\jsse.jar;C:\Java\JBuilder\jdk1.4\jre\lib\rt.jar;C:\Java\JBuilder\jdk1.4\jre\lib\sunrsasign.jar;C:\Java\JBuilder\jdk1.4\lib\dt.jar;C:\Java\JBuilder\jdk1.4\lib\htmlconverter.jar;C:\Java\JBuilder\jdk1.4\lib\tools.jar" StartKlasse


java.sql.SQLException: No row count was produced

SELECT Mitarbeiter.Nachname, Mitarbeiter.Vorname, Angestellter.Gehalt, Vorgesetzter.Zuschlag, Vorgesetzter.HierarchieStufe
FROM Mitarbeiter, Angestellter, Vorgesetzter
WHERE Mitarbeiter.Nr='007';


Die Exception hab ich in der Hauptfenster-Klasse (GUI-Klasse) definiert:

Code:
  void btSuchen_actionPerformed(ActionEvent e) {
    int mMerker;

    mMerker = mensch.suchen();

    switch (mMerker) {
    case 0:
        JOptionPane.showMessageDialog(this, "Daten gefunden");
      break;

    case 1:
        JOptionPane.showMessageDialog(this,
          "Datenbank konnte nicht geöffnet werden");
      break;

    case 2:
        JOptionPane.showMessageDialog(this, "Daten in Datenbank nicht vorhanden!!");
      break;

    case 3:
        JOptionPane.showMessageDialog(this,
       "Datenbank konnte nicht geschlossen werden");
      break;
     }
  }
 
Zuletzt bearbeitet:
Hallo,

ich kenne die Exception zwar nicht komplett, aber ich würde behaupten, dass es an dieser Zeile und den Zeilen danach liegt
Code:
rsA.next();

Du gehst da von aus, dass auf jedenfall ein Ergebnis zurück kommt. Ich kenne deine Tabellen nicht, aber ich würde mal behaupten, dass das ResultSet leer ist.

Du solltest das ganze in eine If-Anweisung packen
Code:
if(rsA.next()){
//hier die Zuweisungen
}


Falls es doch nicht daran gelegen hat, posten doch bitte die komplette Exception, wie zeja schon sagte.

MFG

Sascha
 
es liegt nicht an "rsA.next()"

meine klassenkameraden haben die zeile auch drin und es läuft bei dennen ... außerdem programmieren wir in der schule so mit dem teil und es wurde uns so beigebracht.

oder was meint ihr mit der Exception?
 
Das heißt aber nicht, dass es so richtig ist. Ich würde dir empfehlen es in eine if-Anweisung zu packen.

MFG

Sascha
 
In jedem Fall bitte:
Java:
catch (Exception e) {           // Kein Datensatz vorhanden!
              mMerker = 2;
e.printStackTrace();
            }

Einfach Exceptions übergehen ist nie gut. Daher kriegste auch keine Zeilennummer die Normal in einer Exception dabei steht damit man weiß wo der Fehler liegt. Wichtig, wichtig
 
ok danke dir für die nette prog-zeile ^^

folgendes bekomme ich nun raus:

java.sql.SQLException: Column not found

at sun.jdbc.odbc.JdbcOdbcResultSet.findColumn(JdbcOdbcResultSet.java:1833)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:395)

at Vorgesetzter.suchen(Vorgesetzter.java:117)

at HauptFenster.btSuchen_actionPerformed(HauptFenster.java:401)

at HauptFenster_btSuchen_actionAdapter.actionPerformed(HauptFenster.java:646)

at java.awt.Button.processActionEvent(Button.java:381)

at java.awt.Button.processEvent(Button.java:350)

at java.awt.Component.dispatchEventImpl(Component.java:3598)

at java.awt.Component.dispatchEvent(Component.java:3439)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

java.sql.SQLException: No row count was produced
 
Gut der Fehler liegt bei dir in:
at Vorgesetzter.suchen(Vorgesetzter.java:117)

Also in der Methode Suchen in der Klasse Vorgesetzter in Zeile 117.

Was steht da?
 
Da steht ja schon was nicht passt.
Code:
 setName(rsA.getString("Mitarbeiter.Nachname"));
              setVName(rsA.getString("Mitarbeiter.Vorname"));
              setGehalt(rsA.getDouble("Angestellter.Gehalt"));
              zuschlag = rsA.getDouble("Vorgesetzter.Zuschlag");
              hierarchieStufe = rsA.getInt("Vorgesetzter.HierarchieStufe");

Hier hast du eine Spalte falsch bezeichnet.

MFG

Sascha
 
Zurück