我是JDBC的新手,我在使用时发现了一些奇怪的东西:
catch (SQLException e) {
System.out.println("Error STATE: " + e.getSQLState());
System.out.println("With the following message: " + e.getMessage() );
}
有时会解析消息,但有时不解析。
像:
第一:
第二:
一个被解析,而另一个不被解析,但我可以通过谷歌搜索相应的错误代码来获取错误消息。
我不知道发生了什么......我尝试使用谷歌搜索,但没有发布类似的问题。这是否意味着我的java.sql。*库不完整?
所有帮助将不胜感激。
答案 0 :(得分: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: 名称已由现有对象使用
我看到十个符号,你看到十个问号。我的操作系统会话(本例中为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就足够了)