2015-07-02 14 views
-1

我想將一個MySQL存儲過程轉換爲java代碼。這是非常簡單的SQL。它創建三個臨時表,然後根據它們進行選擇。但是,我在創建最後一個臨時表時遇到與數據截斷相關的SQLWarnings問題。如何禁止JDBC SQLWarnings?

我不是在尋找警告本身的解釋。我在存儲過程的執行過程中得到了相同的警告(由於格式不正確的日期時間字段),只是在那裏沒有引起任何問題。在java版本中,Statement.executeUpdate()拋出SQLWarning後,我嘗試創建的臨時表不存在。

如何禁止SQLWarnings?我希望能夠記錄注意警告文本的消息,但我希望我的臨時表也能成功創建。

我的代碼看起來是這樣的:

sqlStatement = "create temporary table mytemptable as (select ...) ;"; 
try { 
    stmt.executeUpdate(sqlStatement); 
    // Throws SQLWarning about Data Truncation 
} catch (SQLWarning sqlW) { 
    logInfo("SQLWarning Caught: " + sqlW.getMessage()); 
} 
stmt.executeQuery("select * from mytemptable "); 
// Throws SQLException because mytemptable doesn't exist 
+0

試過嗎? http://dev.mysql.com/doc/mysqltest/2.0/en/writing-tests-warning-supp.html –

+0

也許在我的部分不好的措辭,但就像我在我的帖子中說,我不想假裝警告不存在。我希望能夠得到警告,但我不希望它們通過拋出SQLException來中斷我的代碼的執行。 – user1538516

+0

好的,在這種情況下,整個tmp表格尚未創建。所以只是忽略這個警告不會有幫助。你可以嘗試:CREATE TEMPORARY TABLE mytemptable AS SELECT * FROM {yourtable} WHERE 0 = 1; 和第二條語句: INSERT IGNORE INTO mytemptable SELECT * FROM {yourtable}; 這又不會返回警告.....它會保持您的代碼運行 –

回答

0

對我來說這是一個有點怪,但這種等價工作: 創建臨時表mytemptable忽略選擇...;

這樣,jdbc不會引發異常,但您仍然可以調用Statement對象上的getWarnings()來獲取被忽略的警告列表。

感謝Norbert van Nobelen幫助我在OP的評論中弄清楚了這一點。