2013-08-26 47 views
0

我想在mysql中編寫一個存儲過程,在插入表之前驗證數據。 然後使用JDBC將「Zipcode not valid」之類的自定義消息發送回Java,以便它可以顯示在屏幕上。 這樣的事情甚至可能嗎?自定義錯誤從MySQL到jdbc

回答

2

起初我想強調@duffymo是絕對正確

...但如果你還是要寫這樣的程序這段代碼可以幫助:

delimiter ;; 
CREATE PROCEDURE insert_checked_zip(zipdata int) 
BEGIN 
    IF (zipdata > 0) THEN 
     INSERT INTO mytable (zipcode) VALUES (zipdata); 
    ELSEIF 
     SELECT 'zip was invalid'; 
    END IF; 
END 
;; 
delimiter ; 

注:只檢查傳遞的拉鍊是大於0

請考慮這樣做的這些在GUI級別上的檢查 - 它們更便宜,速度更快(僅列出2個優點)。

+0

不確定我會將zip表示爲int。像CT這樣的國家的領先零是有問題的,它不能代表ZIP + 4。更好使用varchar,IMO。 – duffymo

+0

是的,你是對的 - 但說實話,我真的想展示它如何工作。壓縮文件的檢查也只是一個存根,並取決於zip格式和數據類型。真正的實現肯定會有所不同。這是OP的工作,因爲他/她知道拉鍊的外觀如何。 – Jost

+0

謝謝。我決定去客戶端驗證。 這個答案絕對回答了我的問題。 TY – user2670866

1

無論MySQL和JDBC做什麼,我認爲捕捉任何異常並處理顯示給用戶的是控制器的責任。

更重要的是,一路走進數據庫發現您錯誤輸入了一個郵政編碼是一種糟糕的用戶體驗。在UI中進行驗證。輸入應該沒有格式問題。如果存在違反商業規則的情況,我只希望看到那種信息。

+0

謝謝。 但我有問題。我從程序的許多地方插入值(用例)。這讓我在不同的地方多次寫驗證。 如果我編寫用於驗證的存儲過程並在插入過程中簡單調用它,這將會得到解決。 有什麼建議嗎? TIA – user2670866

+0

不,我仍然認爲你需要在每個地方進行UI驗證。你是否說你沒有在你的Web UI中進行任何客戶端驗證?這是一個可怕的設計。 – duffymo

+0

它感覺更簡單。 無論如何,我已決定實施客戶端檢查。 TY – user2670866

1

我相信你不應該寫的sql過程,而應該考慮在觸發前寫入,每次插入行之前都會觸發它,甚至可以在驗證失敗時停止行插入。