Java 了解神秘的Oracle JDBC错误-ORA-00911:无效字符

Java 了解神秘的Oracle JDBC错误-ORA-00911:无效字符,java,jdbc,oracle11g,Java,Jdbc,Oracle11g,我正在编写Java1.6-JDBC-Oracle11代码。我创建了一个名为employee的表,其中包含id、姓名和年龄。我收到错误-ORA-00911:无效字符。我怎样才能解决这个问题 这是我的密码- import java.sql.*; import java.util.Properties; import java.io.IOException; import java.io.FileInputStream; public class HelloOracle { static

我正在编写Java1.6-JDBC-Oracle11代码。我创建了一个名为employee的表,其中包含id、姓名和年龄。我收到错误-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那么多,我无法轻松地排除它们。我也看不出是哪一行代码导致了异常。

请尝试删除SQL语句末尾的分号


波希米亚人完全正确。我不明白为什么这么难。如果您将消息弹出到谷歌,您将得到以下信息:

分号是注意到的第一个问题

另一条建议:不要这样做

catch(SQLException e){System.out.println("Exception: " + e);}
改为这样做:

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

它将为您提供更多信息。

删除;从查询内部看

是的,它现在可以工作了。有时我使用;它也没有抱怨。例如,在create table语句的末尾,我注意到
executeQuery
不喜欢后面的分号,但是
execute
不介意。哇!我不敢相信人们真的为Oracle DB付钱。请将问题从-1上升到0。这个也适用于CREATETABLE语句。我觉得把它也用在select上会更好。我否决了这个问题,因为把错误信息剪切粘贴到搜索引擎中会得到答案。我认为你缺乏主动性值得投反对票,不是使用分号。我对这个问题投了更高的票,因为谷歌中的
ORA-00911:invalid character jdbc
将这个问题作为第一个链接返回。这少了一点关于这个问题的价值,多了一些关于页面排名和SEO的内容。无法想象为什么四年后这个问题被否决了。那是真的;这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-它确实为这个问题提供了一个明确而简单的答案。
catch(SQLException e){
    e.printStackTrace(); // better yet, log it.
}