2012-08-07 49 views
21

我正在製作Java 1.6-JDBC-Oracle 11代碼。我創建了一個名爲employee的表,名稱和年齡。我收到錯誤 - ORA-00911:無效字符。我怎樣才能解決這個問題 ?瞭解神祕的Oracle JDBC錯誤 - ORA-00911:無效字符

這裏是我的代碼 -

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

    } 

} 

不幸的是,Oracle錯誤消息並不像MySQL或MSSQL的信息,我不能輕易麻煩拍攝他們。我也無法看到哪一行代碼導致異常。

回答

45

嘗試從SQL語句的末尾刪除分號。

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

是的,它現在可以工作。有時候我用;並沒有抱怨。例如,在創建表語句的末尾。 – 2012-08-08 00:56:13

+4

我注意到'executeQuery'不喜歡尾隨分號,但'execute'不介意。 – 2013-01-29 21:28:58

+1

哇!我不相信人們真的爲Oracle DB付錢。 – isapir 2018-01-24 23:27:23

0

波希米亞是完全正確的。我不明白爲什麼這麼難。如果彈出消息到谷歌,你會得到這樣的:

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

分號是第一個問題提到。

另一個建議:不要這樣做。

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

而是執行此操作:

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

它會給你很多的更多信息。

+2

什麼是Google? – Bohemian 2012-08-08 00:05:35

+2

@波希米亞 - 讓我搜索谷歌並找出答案:P – 2012-08-08 06:56:11

+0

請將問題從-1提高到0。也適用於創建表語句。我認爲它更好地用於選擇也。 – 2012-08-08 06:57:57

0

刪除;來自查詢內部

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/13636895) – xenteros 2016-09-11 10:16:04

+0

它的確提供了一個清晰而簡單的問題答案。 – 2016-09-11 21:35:35