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

Posted

技术标签:

【中文标题】了解神秘的 Oracle JDBC 错误 - ORA-00911:无效字符【英文标题】:Understanding mysterious Oracle JDBC errors - ORA-00911: invalid character 【发布时间】: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,我无法轻松解决它们。我也看不到是哪一行代码导致了异常。

【问题讨论】:

【参考方案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 它确实为这个问题提供了一个清晰而简单的答案。

以上是关于了解神秘的 Oracle JDBC 错误 - ORA-00911:无效字符的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别