Warum kein Update bzw. Delete möglich

fenerli23

Erfahrenes Mitglied
hi,

bin soeben ein Beispielcode durchgegangen und habe da festgestellt das alle SELECT Anweisungen funktionieren.
Jedoch wollte ich danach ein Update bzw. Delete ausführen doch es tritt die Fehlermeldung auf :

Code:
java.sql.SQLException: ORA-00900: Ungültige SQL-Anweisung

Meine Frage warum kann ich mit diesem Code keine Update bzw. Delete Anweisung ausführen muss dazu etwas umgeändert werden?

Danke
Code:
public class DbTableUpdate
{
	  public static void main( String[] argv )
	  {
	    String sDbDrv=null, sDbUrl=null, sTable=null, sUsr="", sPwd=""; String sSql   = "";
	    if( 3 <= argv.length ) {
	      sDbDrv = argv[0];
	      sDbUrl = argv[1];
	      sTable = argv[2];
	      //if( 4 <= argv.length )  
	      sUsr = argv[3];
	      //if( 5 <= argv.length )  
	      sPwd = argv[4];
	    } else {
	      try {
	        BufferedReader in = new BufferedReader(
	                            new InputStreamReader( System.in ) );
	        System.out.println( "Name des Datenbanktreibers eingeben (z.B. oracle.jdbc.driver.OracleDriver):" );
	        sDbDrv = in.readLine();
	        System.out.println( "Url der Datenbank eingeben (z.B. jdbc:oracle:thin:@localhost:1521:xe):" );
		    sDbUrl = in.readLine();
		    System.out.println( "Name der Tabelle eingeben (z.B. MeineTestTabelle):" );
		    sTable = in.readLine();
		    System.out.println( "Benutzername (z.B. root):" );
	        sUsr = in.readLine();
	        System.out.println( "Passwort (z.B. mysqlpwd):" );
	        sPwd = in.readLine();
	        if( null != sTable && 0 <  sTable.length() &&
	        	       (null == sSql   || 0 == sSql.length())  )
	        	      sSql = "UPDATE" +sTable+ "SET " ;
	        System.out.println( "SQL Befehl:" );
	        sSql = in.readLine();
	        
	      } catch( IOException ex ) {
	        System.out.println( ex );
	      }
	    }
	    if( null != sDbDrv && 0 < sDbDrv.length() &&
	        null != sDbUrl && 0 < sDbUrl.length() &&
	        null != sTable && 0 < sTable.length() ) {
	      Connection cn = null;
	      Statement  st = null;
	      ResultSet  rs = null;
	      try {
	        // Select fitting database driver and connect:
	        Class.forName( sDbDrv );
	        cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd );
	        st = cn.createStatement();
	        rs = st.executeQuery( sSql );
	        // Get meta data:
	        ResultSetMetaData rsmd = rs.getMetaData();
	        int i, n = rsmd.getColumnCount();
	        // Print table content:
	        for( i=0; i<n; i++ )
	          System.out.print( "+---------------" );
	        System.out.println( "+" );
	        for( i=1; i<=n; i++ )    // Attention: first column with 1 instead of 0
	          System.out.print( "| " + extendStringTo14( rsmd.getColumnName( i ) ) );
	        System.out.println( "|" );
	        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
	        System.out.println( "+" );
	        while( rs.next() ) {
	          for( i=1; i<=n; i++ )  // Attention: first column with 1 instead of 0
	            System.out.print( "| " + extendStringTo14( rs.getString( i ) ) );
	          System.out.println( "|" );
	        }
	        for( i=0; i<n; i++ )
	          System.out.print( "+---------------" );
	        System.out.println( "+" );
	      } catch( Exception ex ) {
	        System.out.println( ex );
	      } finally {
	        try { if( null != rs ) rs.close(); } catch( Exception ex ) {}
	        try { if( null != st ) st.close(); } catch( Exception ex ) {}
	        try { if( null != cn ) cn.close(); } catch( Exception ex ) {}
	      }
	    }
	  }
	  
	  // Extend String to length of 14 characters
	  private static final String extendStringTo14( String s )
	  {
	    if( null == s ) s = "";
	    final String sFillStrWithWantLen = "              ";
	    final int iWantLen = sFillStrWithWantLen.length();
	    final int iActLen  = s.length();
	    if( iActLen < iWantLen )
	      return (s + sFillStrWithWantLen).substring( 0, iWantLen );
	    if( iActLen > 2 * iWantLen )
	      return s.substring( 0, 2 * iWantLen );
	    return s;
	  }
}
 
Zuletzt bearbeitet:
Hallo fenerli23,

1.) Hast Du Dir mal die entsprechenden Statements ausgeben lassen?
2.) Hier fehlt hinter Update ein Leerzeichen:
if( null != sTable && 0 < sTable.length() &&
(null == sSql || 0 == sSql.length()) )
sSql = "UPDATE" +sTable+ "SET " ;
System.out.println( "SQL Befehl:" );
sSql = in.readLine();

3.) Was machst Du in dem oben zitierten Source? Wenn ne Bedingung erfüllt ist, belegst Du sSql..... anschließend überschreibst Du sSQL mit etwas Eingegebenem von der Konsole.... :confused:
 
Also erstmal danke für deine Antwort ...

nun nochmal zum Problem, dieser Source gibt alle Select Anweisungen aus ich jedoch will ein Update bzw. Delete ausführen doch dann tritt immer wieder der Fehler auf von dem ich gesprochen habe...

Fehlermeldung:
Code:
java.sql.SQLException: ORA-00900: Ungültige SQL-Anweisung

Mein Ziel ist es nun ein Update bzw Delete zu erstellen in dem eine willkürliche Eingabe erfolgt. Nun würde ich gerne wissen warum dies mit diesem Source erstmal nicht möglich ist bzw. nicht klappt ...
 
Dann noch mal zu meiner Frage: Hast Du Dir die rsultierenden Statements mal ausgeben lassen!? Denn die Fehlermeldung, die Du erhälst, bedeutet, das das Statement falsch ist.....
 
Wie Ronin-Jay schon geschrieben hat:

Lass dir mal das SQL-Statement ausgeben bevor du es abschickst. Und wenn es nicht funktioniert und du es nicht verstehst, poste hier nochmal die abgeschickten Statements.
 
Dann lies mal weiter oben....
In einer Zeile belegst Du sSql mit Update.... da fehlt ein Leerzeichen "UPDATE,_,".

Danach belegst Du sSql aber gleich mit einem String von der Konsole, d.h. Du überschreibst ihn.
Setz mal ein System.out.println(sSql); ein, dann siehst Du, daß der String nicht richtig ist, außer Du gibst Ihn noch mal komplett über die Konsole ein.

Hier: http://www.tutorials.de/forum/java/280167-verbindungsprobleme-mit-oracle-datenbank-2.html hatte ich Dir doch schon eine Klasse bzgl Datenbank-Zugriffen gezeigt. Damit kannst Du sowohl Abfragen, als auch DELETES und UPDATES durchführen...
 
hi habe jetzt das mal so gemacht, d.h den Befehl von der Console eingelesen jedoch tritt immer noch die gleiche Fehlermeldung auf ... stimmt das so nicht?

Code:
	        if( null != sTable && 0 <  sTable.length() &&
	        	       (null == sSql   || 0 == sSql.length())  )
	        	     // sSql = "UPDATE employees SET SALARY = SALARY * 1.08 WHERE JOB_ID='IT_PROG'" ;
	        System.out.println(" SQL Befehl: " );
	        sSql = in.readLine();
 
Setz mal bitte nach Deinem
Java:
sSql = in.readLine();

ein
Java:
System.out.println(sSql);
in den Source und dann poste das Ergebnis mal bitte hier.
 
Habe das mal so gemacht wie du es mir beschrieben hast hier das ergebnis...

Code:
SQL Befehl: 
Update Employees Set salary=8520 Where Employee_ID = 120
Update Employees Set salary=8520 Where Employee_ID = 120
java.sql.SQLException: ORA-00900: 
Ungültige SQL-Anweisung

d.h er gibt das Aus was ich auch eingebe jedoch führt er es leider nicht aus
 
Zurück