# java.sql.SQLException: Before start of result set



## konstantin (26. Jun 2004)

Die besagt Fehlermeldung treibt mich noch in den Wahnsinn...  

Diese Methode ist dazu da um zu überprüfen ob die eingesacnnte ArtikelNummer der Datenbank bekannt ist oder nicht. Die Datenbank hat 2 Tables (KSchrank, ArtListe), ich habe aber keine Entity-Relationships 

Zur Ein- und Ausgabe benutze ich Prog1Tools.IOTools 


```
public static void FügeArtikelEin() 
    { 
         
         
        String artnumr; 
        artnumr = IOTools.readString("Bitte scannen"); //ArtikelNummer wird eingescannt 
         
        Statement stmt = Verbindung.StmtOb(); 
        int menge; 
        int mengeneu; 
         
         
         
        try 
        { 
             
             
            ResultSet rst = stmt.executeQuery("SELECT ArtName FROM ArtListe WHERE ArtNr="+artnumr+";"); 
            int anzahl=0; //anzahl=anzahl der gefundenen Zeilen 
             
            while(rst.next()) 
            { 
                anzahl=1; 
            } 
             
             
            switch (anzahl) 
            { 
                case 0: 
                    String artname; 
                    int haltbar; 
                     
                     
                    System.out.println("Dieser Artikel befindet sich nicht in der Datenbank."); 
                    artname=IOTools.readString("Bitte geben Sie den Artikelnamen ein: "); 
                    haltbar=IOTools.readInteger("Bitte geben Sie die Haltbarkeit von "+artname+" in Tagen ein: "); 
                     
                     
                     
                    stmt.executeUpdate("INSERT into ArtListe(ArtNr,ArtName,Haltbarkeit) VALUES ('"+artnumr+"','"+artname+"',"+haltbar+");"); 
                    stmt.executeUpdate("INSERT into KSchrank(ArtNr,ArtMenge,Datum) VALUES ('"+artnumr+"',1,CURDATE() );"); 
                    stmt.close(); 
                     
                    break; 
                     
                     
                case 1: 
                    int zeilen; 
                    menge = Checks.MengenCheck(artnumr); 
                    mengeneu=menge++; 
                     
                     
                    zeilen = stmt.executeUpdate("UPDATE KSchrank SET ArtMenge="+mengeneu+" WHERE ArtNr='"+artnumr+"';"); 
                     
                    System.out.println(zeilen+" Zeile(n) wurden veraendert!"); 
                     
                    break; 
            }         
             
        } 
         
        catch (SQLException e) 
        { 
            do 
            { 
                System.out.println("Fehlermeldung: "+e.getMessage()); 
                System.out.println("XOPEN-Fehlercode: "+e.getSQLState()); 
                System.out.println("Hersteller-Code: "+e.getErrorCode()); 
                 
            }while ((e=e.getNextException()) !=null); 
             
        } 
  }
```

Es liegt am case 1. case 0 läuft einwandfrei.... 
Wenn Case 1 ausgeführt wird kommt folgende Fehlermeldung: 
java.sql.SQLException: Before start of result set 

Ich habe mich schon in diversen Foren umgeschaut, habe aber bisjetzt noch keine Lösung für mein problem gefunden. 

Ich hoffe, dass Ihr mir weiterhelfen könnt  

MfG Konstantin [/code]


----------



## nollario (26. Jun 2004)

???

Die Fehlermeldung "before start of result set" erscheint idR nur dann, wenn du ein Query ausgeführt hast und das ResultSet nach Ergebnisse fragst, ohne es mit next() auf die erste Zeile zu setzen....

Du führst an der Stelle allerdings ein Update aus (case 1 sagtest du...) hm....


----------



## konstantin (26. Jun 2004)

ah.... VIELEN DANK für deinen Tip.... 

der Fehler lag nicht direkt in der syntax von case 1 sondern in der Methode Mengencheck() aus Checks. 

Habe hier mal den Quelltext von Checks


```
public class Checks
{
	public static int MengenCheck(String ArtNr)
	{
		int menge=0;
		
		Connection cn;
		Statement stmt;
		
		try
		{
			cn = Verbindung.ConnectOb();
			stmt = cn.createStatement();
			ResultSet rst = stmt.executeQuery("SELECT ArtMenge FROM KSchrank WHERE ArtNr='"+ArtNr+"';");
			
			rst.next(); // DIESE ZEILE HATTE ICH VERGESSEN :(
			menge = rst.getInt(1);
		
		}
		
		catch (SQLException err)  // Fehler beim verbinden mit Datenbank
	               {
		      System.err.println("Connect nicht möglich:");
		      System.err.println(err);
		      System.err.println();
		}
			
		
		return (menge);
	}
}
```

Ich habe nach dem Ergebnis gefragt, aber ich bin nicht mit rst.next() auf die erste Zeile gesprungen... 
Ich habs mal im CODE markiert 

Die Lösung war denkbar einfach. Vielen Dank für diesen ausschlaggebenden Tip  . Er hat mich ein ganzes Stück nach vorne gebracht.[/code]


----------

