2013-09-05 40 views
1

只是在這裏指導,請!如何檢查我是否從java插入數據庫

我想插入一些值在我的分貝,從java 我有我的oracle準備好的聲明和東西,它插入確定,但我的其他要求是通過電子郵件發送由於某些原因werent插入的字段。

因此,即時通訊思想使我的方法爲int和返回像0,如果那裏有一個錯誤1,如果它的確定,如果2某些字段沒有插入...等...但

我迷路了盤算如何綁定它,我的意思是,如果有從Java中的SQL的捕獲錯誤我可以把喜歡

catch (SQLException e) {// TODO Auto-generated catch block 
      e.printStackTrace(); 
      return result = 0; 

很顯然我可以把一個錯誤信息之類的東西在那裏我打電話,但我怎麼會知道在哪個項目停止,然後檢索其餘的不插入的字段...

a你有想法嗎?任何人都有一個例子?

在此先感謝

+0

我不認爲任何sql語句可以部分插入數據 –

+0

您應該分析一些'SQLException'代碼,並基於該代碼返回給用戶的消息,而不是返回普通的0.請注意,您可以創建自己的'Exception's並基於'SQLException'代碼,您可以重新引出其中的一個來簡化代碼維護。 –

+0

您不應該使用int值來指示錯誤,而是可以重新拋出異常或根本不捕獲它。如果您確實需要返回值來指示成功的狀態,請使用'enum'。這是更多的面向對象和更少的錯誤傾向。 – mike

回答

1

首先嚐試儘可能在Java中進行儘可能多的驗證,並在將它們保存在數據庫中之前識別壞記錄,然後在數據庫發送併發送電子郵件之前捕獲這些記錄。

如果您擔心數據庫級別問題,例如contrainst等,那麼你需要選擇性能VS Flexibile特點

選項一:不使用批量插入一次一個記錄,任何失敗,您可以發送電子郵件,這是從性能的角度看壞,但會解決你的目的

選項2:將您的記錄分成50或100批,無論批次失敗,您都可以報告整批失敗,這也會報告一些好記錄,但您將獲得有關未持續的信息。

選項3:如果批次失敗,則將記錄劃分爲批次,然後嘗試爲該特定批次一次保存一條記錄,通過這種方式您將能夠識別不良記錄並優化性能,這將需要更多的編碼和測試。

所以,你可以選擇什麼都適合你,但我會建議如下:

  1. 做最大的驗證在Java中
  2. 拆分爲較小的批次和使用選項3

乾杯!

+0

這主要是我想要的,指導一個建議,謝謝你的時間@SachinThapa ... 是的,我會嘗試這2個步驟...也許只是在查詢之前進行大量驗證,將會更簡單現在 – jompi

+0

@ Raf0c - 格拉德能夠提供幫助。 –

0

當你有你插入的所有字段插入包含在聲明;或者沒有。因此,如果在運行您的語句時拋出異常,那麼您會發送一封電子郵件。

如果沒有異常拋出,那麼你會認爲它已經工作。

或者,在運行插入之後,您可以嘗試執行select以檢查插入的數據是否實際存在。

+0

因此,你所說的是它插入了所有內容,或無 ? 有沒有辦法知道它是否停在某一行? 我知道我的查詢是插入,如果它都可以,但我想知道是否有辦法知道是否有錯誤,在哪裏停下來然後檢索它們 – jompi

+0

如果你不拋出異常,那麼一般來說,聲明有效。總的來說,你可能會有一些不確定的實現。 –

+0

我做了一個例外,是的,如果有一個例外,我會發送一封電子郵件,我只是想知道是否有一種方法來檢索插入值,出於某種原因有故障,因此它不插入任何東西,然後發送帶有信息的電子郵件,也許類似於「插入停在:bla bla bla」,其中bla bla是插入值,帶有錯誤 – jompi

0

如果語句失敗,則不會插入任何字段,因爲oracle會在內部進行回滾以保持數據的一致性。

+0

是的,我可以看到,但是,是否知道是否有方法知道聲明有錯?然後檢索那個? – jompi

相關問題