2011-03-06 61 views
2

長時間搜索此問題的解決方案,但仍然無法獲得此答案,我試圖在我的應用程序中使用JAVA製作搜索框。如何捕獲數據的SQLException? (例如,數據不存在)

我想從數據庫中捕捉異常並告訴用戶該列不存在或重複數據,我可以知道我該怎麼做?

+0

因爲我.NET開發人員,但需要Java來完成當前任務,我想知道的例外爲C#(如果可用)= d – 1myb 2011-03-06 07:58:08

+0

SMT想怎麼做其他的匹配'嘗試{}趕上{/ *做你永遠不會做的事* /}'? – 2011-03-06 08:41:42

+0

是啊...但我如何從sql中捕獲消息並返回給用戶?像內容重複,只捕獲異常不會告訴用戶這個消息=。= – 1myb 2011-03-06 08:54:48

回答

5

這是不是一個真正的容易做到的事情和解決方案將取決於很多的SQL連接(即,MySQL和甲骨文等)

我展示的供應商做到這一點使用模式的一種方式SQLException的錯誤信息

private final int INEXISTENT_COLUMN_ERROR = ? 
    private final int DUPLICATE_DATA_ERROR = ? 

    private final String INEXISTENT_COLUMN_PATTERN = ?; 
    private final String DUPLICATE_DATA_PATTERN = ?; 

    ... 

    try { 
      ... 
     } catch (SQLException e){ 
      if (e.getErrorCode() == INEXISTENT_COLUMN_ERROR) 
       System.out.println("User friendly error message caused by column " + this.matchPattern(e.getMessage(), this.INEXISTENT_COLUMN_PATTERN)); 
      if (e.getErrorCode() == DUPLICATE_DATA_ERROR) 
       System.out.println("User friendly error message caused by duplicate data " + this.matchPattern(e.getMessage(), this.DUPLICATE_DATA_PATTERN)); 
     } 

... 

private String matchPattern(final String string, final String pattern) { 
    final Pattern p = Pattern.compile(pattern); 
    final Matcher m = p.matcher(string); 
    ... 
} 
+0

Thx爲你的例子,這就是我想要的,我可能知道有一個DUPLICATE DATA ERROR的列表...或其他SQL錯誤代碼?我的主數據庫是MSSql。謝謝= D – 1myb 2011-03-06 14:03:06

+0

@spencer你應該看看谷歌的供應商的錯誤代碼列表。但你也可以找出自己的System.out.print(e.getErrorCode()) – klonq 2011-03-06 23:54:37

+0

Thx = D在java中做不到,因爲使用eclipse,弱調試但在c#(Visual Studio)工作^^ – 1myb 2011-03-07 03:48:49