2015-11-08 65 views
2

我是新来的JDBC,我发现了一些奇怪的,当我使用:JAVA的SQLException错误信息有时不被解析

catch (SQLException e) { 
    System.out.println("Error STATE: " + e.getSQLState()); 
    System.out.println("With the following message: " + e.getMessage()); 
} 

有时消息进行分析,但有时没有。

像:

第一:
enter image description here

二:
enter image description here

一个被解析,而另一种是没有,但我可以通过谷歌搜索相应的错误得到错误信息码。

我不知道发生了什么事情..我试着用Google搜索它,但没有发布类似的问题。这是否意味着我的java.sql。*库不完整?

所有帮助将不胜感激。

+0

请将错误文本内联并简单地发布电子文本,而不是图像。 –

+1

这看起来像你的一些例外可能有他们的消息来自不同的本地化。 – RealSkeptic

+0

我建议调试它,看看在什么时候在异常变量中存储了什么 – nabeel

回答

3

这意味着您的操作系统设置不支持正在使用的语言中的错误消息的符号。 ORA-01017消息是在数据库应用英语的语言设置之前发出的,更重要的是在西方脚本中。一旦你连接了Java语言环境,就可以获得荣誉。

例如,我可以在java -Duser.language=zh -Duser.country=CN的代码中看到这两个代码;第一已提供不正确的凭据,二是试图创建现有的表:

java.sql.SQLException: ORA-01017: invalid username/password; logon denied 

java.sql.SQLSyntaxErrorException: ORA-00955: 名称已由现有对象使用 

我看到十个符号,在这里你看到10问号。我的操作系统会话(Linux在这种情况下)有LANG=en_US.UTF-8。如果我将其改为具有较少定义的符号的东西,例如export LANG="en_US.ASCII",我仍然看到的第一条消息,但现在我得到同样的,你的第二个:

java.sql.SQLException: ORA-01017: invalid username/password; logon denied 

java.sql.SQLSyntaxErrorException: ORA-00955: ?????????? 

的中国符号现在可以不再受我的操作系统会被渲染。

因此,将您的操作系统语言环境设置为可以表示您正在使用的语言的符号的内容,最好是UTF8。例如,如果Java与中国语言环境下运行,你可以这样做在Linux下是一致的:

export LANG="zh_CN.UTF-8" 
java -Duser.language=zh -Duser.country=CN 

ORA-00955: 名称已由现有对象使用 

或者,如果你想看到在英文中的所有邮件修改Java语言环境中的英语:

export LANG="en_CN.UTF-8" 
java -Duser.language=en -Duser.country=CN - 

ORA-00955: name is already used by an existing object 

(虽然Java无论如何都应该拿起从您的区域设置默认的语言,所以也许根本就不提供在java调用语言或国家明确;只要设置正确LANG然后将足够)

+0

我已经尝试过它,它的工作原理!非常感谢。 – Tipton