illegal operation on empty result set

Status
Nicht offen für weitere Antworten.

jim_panse

Mitglied
hey leute hab ein kleines projekt das ich zum laufen bringen soll, daten sollen aus einer *.txt datei ausgelesen und in eine mysql datenbank gespeichert werden, jedoch bekomme ich beim ausführen des programms immer die fehlermeldung:" illegal operation on empty result set"

als kleine hilfe hier meine methode in der die fehlermeldung auftritt

Java:
public void writeDB(String host, String user, String pswd, String schema, HashMap<String,DICOMValues> optMap) throws Exception{
        MySQLTranslator mySQLT = new MySQLTranslator();
        mySQLT.connect(host, user, pswd, schema);   //Verbindung mit dem MySQL-Server
        ResultSet rsID = null;                      //Initialisierung des ResultSets
        ResultSet rsIsEmpty = null;
        int rsStudy = 0;
        
        System.out.println("Initialisierung Resultset");

        Set<String> keySet = optMap.keySet();
        for (String act : keySet){
            
            String key = optMap.get(act).getDate() + optMap.get(act).getMod() + optMap.get(act).getDept();
            String modId = "";
            String uid = "";
            
            String isEmptyQuery = "SELECT * FROM study where uid = '" + key + "'";
            String modQuery = "SELECT id FROM modality where attribute = '" + optMap.get(act).getMod() + "' and department_attribute = '"+ optMap.get(act).getDept() +"'";
            
            rsIsEmpty = mySQLT.writeSELECTQuery(isEmptyQuery);
            if (rsIsEmpty.next()){
                uid = rsIsEmpty.getString("uid");
                
            }else{
                uid = "";
            }
            
            if(uid.equals("")){
                rsID = mySQLT.writeSELECTQuery(modQuery);
                rsID.next();
                modId = rsID.getString("id");
                
                String queryStudy = "insert into study (uid, modality_id, numstudy, numpic, datestudy) values ('" + key + "','" + modId + "', " + optMap.get(act).getNumstud() + ", " + optMap.get(act).getNumpic() + ", " + optMap.get(act).getDate() + ")";
                rsStudy = mySQLT.writeINSERTQuery(queryStudy);
            } else if(uid.equals(key)){
                rsID = mySQLT.writeSELECTQuery(modQuery);
                rsID.next();
                modId = rsID.getString("id");
                
                String queryStudy = "update study set modality_id='" + modId + "', numstudy="+optMap.get(act).getNumstud()+", numpic=" + optMap.get(act).getNumpic() + " where uid='" + key + "'";
                rsStudy = mySQLT.writeINSERTQuery(queryStudy);
            }
        }
        
        mySQLT.deConnect();
        
    }

kann es vielleicht daran liegen, dass in der datenbank in einer bestimmten tabelle schon etwas drin stehen muss?

m.f.g
 

jim_panse

Mitglied
der fehler tritt auf sobald die methode writeDB aufgerufen wird.

aber da das System.out noch ausgegeben wird, fängt es glaube ich hier an:

Java:
Set<String> keySet = optMap.keySet();
        for (String act : keySet){

die fehlermeldungen werden in eine errorlog datei umgeleitet, wo man dann nur mehr sehen kann welcher fehler entstanden ist und nicht wo.

kann es sein, dass man in der datenbank in einer tabelle was ändern muss damit es geht ?
 
S

SlaterB

Gast
der Fehler dürfte in Zeile 30 oder 37 auftreten,
Grund ist jeweils, dass das SELECT nichts liefert und du ungeprüft davon ausgehst, das etwas vorhanden ist,

was die DB-Anfragen zu bedeuten haben kann man wohl kaum erraten,

ein Programm ohne Error-Logging, Debugging-Möglichkeiten oder System.out.println zu schreiben ist ja sehr selbstmörderisch

edit:
halt,
> aber da das System.out noch ausgegeben wird, fängt es glaube ich hier an:

wenn das doch geht, und du nur Exception unverständlicherweise nicht ausgibst,
dann schreibe notfalls zwischen jede Zeile
System.out.println("Zeile 1");
..
System.out.println("Zeile 2");
..
System.out.println("Zeile 3");
..

so findet man auch die Zeile des Fehlers..
 

sparrow

Top Contributor
Was der Herr SlaterB dir damit sagen möchte:

Wenn du deine Exceptions nicht behandelst liegt den Fehler in Zeile 1.
Code:
throws Exception
muss da weg oder die Exception außerhalb der Methode vernünftig behandelt und ausgegeben werden.
Und der StackTrace der Exception sagt dir dann ganz, ganz genau in welcher Line das ganze ausgelöst wurde.
 
Zuletzt bearbeitet:

sparrow

Top Contributor
Oooooooooh... mist
Ich mein natürlich den SlaterB.
Tschuldigung.

Ich werd alt... und blind... und fett....
 

jim_panse

Mitglied
es geht bis zeile 21 danach wird nichts mehr ausgegeben

zur besseren übersicht noch mal der code:

Java:
if(uid.equals("")){
                System.out.println("ZEILE 19");
                rsID = mySQLT.writeSELECTQuery(modQuery);
                System.out.println("ZEILE 20");
                rsID.next();
                System.out.println("ZEILE 21");   // BIS HIER!
                modId = rsID.getString("id");
                System.out.println("ZEILE 22");
                String queryStudy = "insert into study (uid, modality_id, numstudy, numpic, datestudy) values ('" + key + "','" + modId + "', " + optMap.get(act).getNumstud() + ", " + optMap.get(act).getNumpic() + ", " + optMap.get(act).getDate() + ")";
                System.out.println("ZEILE 23");
                rsStudy = mySQLT.writeINSERTQuery(queryStudy);
              System.out.println("ZEILE 24");  
            } else if(uid.equals(key)){
                System.out.println("ZEILE 25");
                rsID = mySQLT.writeSELECTQuery(modQuery);
                System.out.println("ZEILE 26");
                rsID.next();
                System.out.println("ZEILE 27");
                modId = rsID.getString("id");
                System.out.println("ZEILE 28");
                String queryStudy = "update study set modality_id='" + modId + "', numstudy="+optMap.get(act).getNumstud()+", numpic=" + optMap.get(act).getNumpic() + " where uid='" + key + "'";
                System.out.println("ZEILE 29");
                rsStudy = mySQLT.writeINSERTQuery(queryStudy);
            }
        }
        
        mySQLT.deConnect();
 
S

SlaterB

Gast
habe ich schon gedacht und erwähnt und alle möglichen Folgerungen daraus auch hingeschrieben ;)
mehr Tipps kannst du also ohne weiteren Informationen von dir nicht bekommen
 

sparrow

Top Contributor
Jau... genau das wollte ich verhindern.
Lern Exception-Handling. Sofort.

Ansonsten ist rsID vielleicht ein leeres ResultSet und die Abfrage in modQuery liefert demnach keine Zeilen.
 

jim_panse

Mitglied
o.k o.k ich habs jetz mit try catch um den ganzen block gemacht

er wirft irgendeine sql exception und wenn ich auf den fehler klicke dann kommt diese zeile:

Java:
modId = rsID.getString("id");

das lustige is, wenn ich jetz in meine datenbank schau, stehn die werte aufeinmal drin so wie ich sie haben wollt :D

find ich irgendwie seeeeeeeeeeeeeehr komisch

weil eigentlich sollte ja wenn er eine exception wirft schluss sein oda?
jetz muss ich die also noch irgendwie wegbekommen... soweit ich das versteh steht in rsID oder in id nix drin.
 
Zuletzt bearbeitet:

jim_panse

Mitglied
sry ^^

diese exception:
Java:
java.sql.SQLException: Illegal operation on empty result set.
 
M

maki

Gast
und bekomm ich jetz keinen beitrag mehr ?
Welche Frage ist denn noch offen?

Diese Exception hier
Code:
java.sql.SQLException: Illegal operation on empty result set.
sagt doch eindeutig dass du über ein leeres ResultSet iterieren willst.
Die Zeile kennst du auch schon, würde also mal das Select Statement korrigieren wenn es falsch ist oder damit rechnen dass es eben keine Ergebnisse geben kann.
 

jim_panse

Mitglied
die frage die noch offen ist, ist warum das programm eine exception wirft, aber trotz allem funktioniert so wie es sein sollte ;)
 
S

SlaterB

Gast
das war nur für deine Nachfrage 'Was verbirgt sich denn hinter "irgend eine sql exception". ' ;)

warum die Exception kommt, wurde erklärt,

eine Erklräung, warum das Programm trotzdem mehr oder weniger funktioniert, ist etwas viel verlangt
 
Status
Nicht offen für weitere Antworten.

Oben