2012-08-07 8 views
21

Ich mache Java 1.6-JDBC-Oracle 11-Code. Ich habe eine Tabelle namens Mitarbeiter mit ID, Name und Alter erstellt. Ich bekomme den Fehler - ORA-00911: ungültiges Zeichen. Wie kann ich das beheben?Mysteriöse Oracle JDBC-Fehler verstehen - ORA-00911: ungültiges Zeichen

Hier ist mein Code-

import java.sql.*; 
import java.util.Properties; 
import java.io.IOException; 
import java.io.FileInputStream; 

public class HelloOracle { 

    static String query = 
     "SELECT emp_id, emp_name, emp_age " + 
     "FROM employee;"; 

    public static void main(String[] args) { 
     String username = ""; 
     String password = ""; 
     Properties prop = new Properties(); 
     try { 
      FileInputStream fis = new FileInputStream("Login.properties"); 
      prop.load(fis); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 

     username = prop.getProperty("username").trim(); 
     password = prop.getProperty("password").trim(); 

     try { 
      Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe", username, password); 

      Statement stmt = con.createStatement(); 

      ResultSet rs = stmt.executeQuery(query); 

      while (rs.next()) { 
       System.out.print(rs.getString("emp_id")); 
       System.out.print(" , "); 
       System.out.print(rs.getString("emp_name")); 
       System.out.print(" , "); 
       System.out.print(rs.getString("emp_age")); 
       System.out.println(); 
      } 
     } catch (SQLException e) { 
      System.out.println("Exception: " + e); 
     } 

    } 

} 

Leider Oracle Fehlermeldungen wie mysql oder MS SQL nicht so informativ sind, und ich bin nicht in der Lage, sie leicht zu Schwierigkeiten schießen. Ich bin auch nicht in der Lage zu sehen, welche Codezeile die Ausnahme verursacht hat.

Antwort

45

Versuchen Sie, den Semikolon vom Ende Ihrer SQL-Anweisung zu entfernen.

dh

static String query = "SELECT emp_id, emp_name, emp_age " + 
    "FROM employee"; // no trailing ";" in the SQL 
+0

Ja, es funktioniert jetzt. Manchmal benutze ich; und es beschwert sich nicht. Zum Beispiel am Ende von create table-Anweisungen. –

+4

Ich habe bemerkt, dass 'executeQuery' das abschließende Semikolon nicht mag, aber' execute' macht nichts dagegen. –

+1

Wow! Ich kann nicht glauben, dass Leute tatsächlich Geld für Oracle DB bezahlen. – isapir

0

Bohemian ist hier genau richtig. Ich verstehe nicht, warum das so schwer war. Wenn Sie die Nachricht in Google Pop, erhalten Sie diese:

http://www.dba-oracle.com/sf_ora_00911_invalid_character.htm

Das Semikolon ist das erste Problem zur Kenntnis genommen.

Eine weitere Empfehlung: Tun Sie das nicht.

catch(SQLException e){System.out.println("Exception: " + e);} 

diese stattdessen tun:

catch(SQLException e){ 
    e.printStackTrace(); // better yet, log it. 
} 

Es wird Ihnen viel mehr Informationen.

+2

Was ist Google? – Bohemian

+2

@ Bohemian-lass mich google suchen und finde das heraus: P –

+0

Bitte upvote die Frage von -1 bis 0. Die; funktioniert auch für die create table-Anweisung. Ich dachte, dass es besser ist, es für select auch zu verwenden. –

0

entfernen Sie die; von innerhalb der Abfrage

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/13636895) – xenteros

+0

Es bietet eine klare und einfache Antwort auf die Frage. –

Verwandte Themen