2015-11-08 38 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