2012-08-07 8 views
21

Tworzę kod Java 1.6-JDBC-Oracle 11. Stworzyłem tabelę o nazwie pracownik o identyfikatorze, nazwisku i wieku. Otrzymuję błąd - ORA-00911: nieprawidłowy znak. Jak mogę to naprawić?Zrozumienie tajemniczych błędów JDBC Oracle - ORA-00911: nieprawidłowy znak

Oto moja 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); 
     } 

    } 

} 

Niestety, komunikaty o błędach Oracle nie są tak dobrze poinformowany jak MySQL lub MSSQL, a ja nie jestem w stanie strzelać kłopoty je łatwo. Nie jestem również w stanie zobaczyć, która linia kodu spowodowała wyjątek.

Odpowiedz

45

Spróbuj usunąć średnik z końca instrukcji SQL.

tj

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

Tak, teraz działa. Czasami używam; i nie narzeka. Na przykład na końcu instrukcji tworzenia tabeli. –

+4

Zauważyłem, że 'executeQuery' nie lubi końca średnika, ale' execute' nie ma nic przeciwko. –

+1

Wow! Nie mogę uwierzyć, że ludzie faktycznie płacą pieniądze za Oracle DB. – isapir

0

Bohemian jest dokładnie prawo. Nie rozumiem, dlaczego to było takie trudne. Jeśli pojawi się komunikat w Google, dostaniesz to:

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

średnik jest pierwszy problem zauważył.

Kolejne zalecenie: nie rób tego.

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

Czy to zamiast:

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

To da ci wiele innych informacji.

+2

Co to jest Google? – Bohemian

+2

@ Czeski - pozwól mi wyszukać google i przekonaj się: P –

+0

Powtórz pytanie od -1 do 0. The; działa również przy tworzeniu instrukcji tabeli. Pomyślałem, że lepiej go używać również do selekcji. –

0

usunąć; od wewnątrz zapytania

+0

Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. - [Z recenzji] (/ opinia/niskiej jakości-posts/13636895) – xenteros

+0

Zapewnia jasną i prostą odpowiedź na to pytanie. –

Powiązane problemy