【问题标题】:Understanding mysterious Oracle JDBC errors - ORA-00911: invalid character了解神秘的 Oracle JDBC 错误 - ORA-00911:无效字符
【发布时间】:2012-08-05 01:09:43
【问题描述】:

我正在编写 Java 1.6-JDBC-Oracle 11 代码。我创建了一个名为employee 的表,其中包含id、name 和age。我收到错误 - 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,我无法轻松解决它们。我也看不到是哪一行代码导致了异常。

【问题讨论】:

    标签: java jdbc oracle11g


    【解决方案1】:

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

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

    【讨论】:

    • 是的,现在可以使用了。有时我使用;它没有抱怨。例如,在 create table 语句的末尾。
    • 我注意到executeQuery 不喜欢结尾的分号,但execute 不介意。
    • 哇!我不敢相信人们真的为 Oracle DB 花钱。
    【解决方案2】:

    波西米亚风格完全正确。我不明白为什么这这么难。如果您将消息弹出到 Google 中,您会得到:

    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.
    }
    

    它会给你更多的信息。

    【讨论】:

    • 请从 -1 到 0 投票。也适用于创建表语句。我认为最好也将它用于选择。
    • 我对这个问题投了反对票,因为将错误消息剪切并粘贴到搜索引擎会带来答案。我认为值得投反对票的是你缺乏主动性,而不是使用分号。
    • 我赞成这个问题,因为 Google 中的 ORA-00911: invalid character jdbc 将此问题作为第一个链接返回。
    • 少说问题的价值,多说页面排名和搜索引擎优化。
    • 无法想象为什么这件事在事实发生四年后被否决。那么是真的;今天是真的。
    【解决方案3】:

    删除 ;从查询内部

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • 它确实为这个问题提供了一个清晰而简单的答案。
    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2015-03-15
    • 2023-03-20
    相关资源
    最近更新 更多