# Sql Befehl wird nicht ausgeführt



## Ich_v2.23 (21. Mai 2008)

Ich habe hier ein Problem mit der Zeile 





> result = stmt.executeQuery(sql);


 (ziemlich weit unten) kann aber nicht erkennen warum es ein problem mit dem Statement geben sollte.  ???:L  

```
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Query {

    static String url;
    static String Driver;
    static String sql;
    static int nummer;
    static String name, vorname, telefon;
    static Connection con;
    static Statement stmt;
    static ResultSet result;
    
   static String hostname = "t";
   static String port = "1521";
   static String user = "ad";
   static String password = "xxxxx";
   static String sid = "T1";

    public static void main (String arguments[]) {

        // Abfragen der Verbindungsparameter
       
        System.out.println("Datenbankzugriff mit JDBC");
        System.out.println("=========================\n\n");

        // Adresse der zu verbindenden Datenbank
        url = "jdbc:oracle:thin:@"+hostname+":"+port+":"+sid;
        
        // Treiber laden und Verbindung herstellen
        try {
             // JDBC over ODBC Treiber laden
             Class.forName("oracle.jdbc.driver.OracleDriver");

             // Verbindung mit der Datenbank aufnehmen
             con = DriverManager.getConnection(url,user,password);
             System.out.println("Verbinden ...");
            }
             catch (SQLException e) {
               System.out.println("Fehler beim Verbindungsaufbau!");
               System.exit(0);
             }
              catch (ClassNotFoundException e) {
                System.out.println("JDBC over ODBC Treiber nicht gefunden!");
                System.exit(0);
              }

         System.out.println("Verbindungsaufbau erfolgreich\n");

         // Ausgabe der Datensaetze
         try {
              // SQL-Select-Befehl
              sql = "SELECT * FROM TELEFON";

              // Statement erstellen um SQL-Befehle auszufuehren
             stmt = con.createStatement();

              // SQL-Befehl ausfuehren
              result = stmt.executeQuery(sql);
    

              System.out.println("Nummer\tName\tVorname\tTelefon");
              System.out.println("---------------------------------------");

              // Datensaetze holen und auf dem Bildschirm ausgeben
              
              while (result.next())
              {
               nummer  = result.getInt("Nummer");
               name    = result.getString("Name");
               vorname = result.getString("Vorname");
               telefon = result.getString("Tel");

               System.out.println(nummer+"\t"+name+"\t"+vorname+"\t"+telefon+"\t");
              }
               // Verbindungen schliessen
               result.close();
               stmt.close();
               con.close();
         }
          catch (SQLException e) {
            System.out.println("Fehler bei der Ausgabe!");
          }


    }

}
```


----------



## SlaterB (21. Mai 2008)

nein du hast kein Problem damit

(wenn doch dann nenne Kompilerfehler/ Exception oder Fehlverhalten zur Laufzeit!)

---------

> System.out.println("Fehler bei der Ausgabe!"); 


-> 

System.out.println("Fehler bei der Ausgabe!"); 
e.printStackTrace();


----------



## DP (21. Mai 2008)

bis wohnin kommt der denn?


----------



## Ich_v2.23 (21. Mai 2008)

der kommt bis zum befehl 
	
	
	
	





```
result = stmt.executeQuery(sql);
```
 fehler kommt keiner da ich es eigentlich mit dem catch auffange, deshalb habe ich den jetzt auskomentiert das sieht dann so aus :



```
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Query {

    static String url;
    static String Driver;
    static String sql;
    static int nummer;
    static String name, vorname, telefon;
    static Connection con;
    static Statement stmt;
    static ResultSet result;
    
   static String hostname = "tar";
   static String port = "1521";
   static String user = "admin";
   static String password = "admin";
   static String sid = "TEST1";

    public static void main (String arguments[]) {

        // Abfragen der Verbindungsparameter
       
        System.out.println("Datenbankzugriff mit JDBC");
        System.out.println("=========================\n\n");

        // Adresse der zu verbindenden Datenbank
        url = "jdbc:oracle:thin:@"+hostname+":"+port+":"+sid;
        
        // Treiber laden und Verbindung herstellen
        try {
             // JDBC over ODBC Treiber laden
             Class.forName("oracle.jdbc.driver.OracleDriver");

             // Verbindung mit der Datenbank aufnehmen
             con = DriverManager.getConnection(url,user,password);
             System.out.println("Verbinden ...");
            }
             catch (SQLException e) {
               System.out.println("Fehler beim Verbindungsaufbau!");
               System.exit(0);
             }
              catch (ClassNotFoundException e) {
                System.out.println("JDBC over ODBC Treiber nicht gefunden!");
                System.exit(0);
              }

         System.out.println("Verbindungsaufbau erfolgreich\n");

         // Ausgabe der Datensaetze
         //try {
              // SQL-Select-Befehl
              sql = "SELECT * FROM TELEFON";

              // Statement erstellen um SQL-Befehle auszufuehren
              stmt = con.createStatement();

              // SQL-Befehl ausfuehren
              result = stmt.executeQuery(sql);
    

              System.out.println("Nummer\tName\tVorname\tTelefon");
              System.out.println("---------------------------------------");

              // Datensaetze holen und auf dem Bildschirm ausgeben
              
              while (result.next())
              {
               nummer  = result.getInt("Nummer");
               name    = result.getString("Name");
               vorname = result.getString("Vorname");
               telefon = result.getString("Tel");

               System.out.println(nummer+"\t"+name+"\t"+vorname+"\t"+telefon+"\t");
              }
               // Verbindungen schliessen
               result.close();
               stmt.close();
               con.close();
         	  }
         // catch (SQLException e) {
         //   System.out.println("Fehler bei der Ausgabe!");
         // }


    }

}
```

und dann bekomme ich den fehler :



> Exception in thread "main" java.lang.Error: Unresolved compilation problem:
> 
> at Query.main(Query.java:25)


----------



## DP (21. Mai 2008)

der fehler kommt weil du ein try ohne catch hast. 

ich glaube deine tabelle ist leer.

mach mal 

select count(*) from telefon


----------



## SlaterB (21. Mai 2008)

die Klammer vor dem catch musst du auch auskommentieren,
und 'throws Exception' an die main-Operation anschreiben

oder alles wieder rein und wie gesagt mit 
e.printStackTrace();
im catch den Fehler ausgeben


----------



## Ich_v2.23 (21. Mai 2008)

```
e.printStackTrace();
```
 gibt die Fehlermeldung



> java.sql.SQLException: ORA-00942: Tabelle oder View nicht vorhanden
> 
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
> at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
> ...



Die Tabelle ist allerdings Vorhanden und mit einem Datensatz gefüllt.[/code]


----------



## SlaterB (21. Mai 2008)

dazu kann man kaum was gescheites sagen,
dazu muss man deine ganze DB kennen, deinen Zugriff,
die Tabellen und Lese-Rechte usw.

Oracle-DB ist ja nun kein Kinderspiel, 
hast du niemanden vor Ort, der dir das einrichtet/ beim Start hilft?


----------



## Ich_v2.23 (21. Mai 2008)

Naja der Fehler war dann doch ganz banal. Ich hab wohl die Tabelle unter einem falschen benutzer angelegt.

Trotzdem besten Dank


----------

