2012-08-07 18 views
21

Tôi đang tạo mã Java 1.6-JDBC-Oracle 11. Tôi đã tạo một bảng có tên là nhân viên có id, tên và tuổi. Tôi gặp lỗi - ORA-00911: ký tự không hợp lệ. Làm thế nào tôi có thể sửa lỗi này ?Hiểu các lỗi Oracle JDBC bí ẩn - ORA-00911: ký tự không hợp lệ

Đây là số- tôi

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

    } 

} 

Thật không may, thông báo lỗi oracle không phải là thông tin như mysql hoặc MSSQL và tôi không thể gặp rắc rối bắn chúng một cách dễ dàng. Tôi cũng không thể thấy dòng mã nào gây ra ngoại lệ.

Trả lời

45

Hãy thử xóa dấu hai chấm bán từ cuối câu lệnh SQL của bạn.

tức

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

Có, nó hoạt động ngay bây giờ. Đôi khi tôi sử dụng; và nó không phàn nàn. Ví dụ, ở cuối tạo các câu lệnh bảng. –

+4

Tôi nhận thấy rằng 'executeQuery' không giống như dấu chấm phẩy sau, nhưng' execute' không quan tâm. –

+1

Thật tuyệt vời! Tôi không thể tin rằng mọi người thực sự trả tiền cho Oracle DB. – isapir

0

Bohemian là hoàn toàn đúng. Tôi không hiểu tại sao điều này lại quá khó. Nếu bạn bật thông điệp vào Google, bạn sẽ có được điều này:

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

Các dấu chấm phẩy là vấn đề đầu tiên ghi nhận.

Một đề xuất khác: Đừng làm điều này.

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

Làm điều này thay vì:

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

Nó sẽ cung cấp cho bạn rất nhiều thông tin hơn.

+2

Google là gì? – Bohemian

+2

@ Bohemian-hãy để tôi tìm kiếm trên google và tìm hiểu điều đó: P –

+0

Vui lòng upvote câu hỏi từ -1 đến 0. The; cũng làm việc để tạo bảng sao kê. Tôi nghĩ rằng nó tốt hơn để sử dụng nó cho chọn cũng. –

0

xóa; từ bên trong truy vấn

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - [Từ đánh giá] (/ đánh giá/chất lượng thấp-posts/13636895) – xenteros

+0

Nó cung cấp một câu trả lời rõ ràng và đơn giản cho câu hỏi. –