黑子的程序員生涯

          努力保持編程中美好的感覺

          如何刪除字典數據?

          所謂字典就是數據庫應用中被其他表(通常加以外鍵約束)引用的表,如客戶表引用客戶類型,那么客戶類型即為字典表。刪除字典數據要考慮是否已被其他數據引用,一般不允許做級聯刪除。

          這個問題想必大家都碰到過,但各有各的?做法。本人與若干同事討論過,將各種做法總結一下。

          1. 物理刪除,即用delete SQL刪除。如果字典數據被引用,則會拋出違反外鍵約束的異常,將其封裝為可讀的信息提示給用戶。JDBC中的異常類為SQLException,如何判斷是違反外鍵約束的異常呢?有方法如下:
            • 利用SQLException中的errorCode,這是數據庫特有的錯誤編碼。
            • 利用SQLException中的SQLState,在JAVA API DOC中說明這個是SQL99或XOPEN 標準的編碼,而且可以用connection的meta data來判斷符合哪個標準。經過的試驗,說明這個meta data不太好用,但是SQLState還是較為統一的。
              ?mysql5.0.21sqlserver2000oracle10postgresql8
              ANSI99 SQLState標準的違反外鍵約束編碼為:2300023000230002300023503(可能要在BatchUpdateException的nextException中才能取得)
              Connection的meta data中的getSQLStateType(),符合SQL99標準應該為22202
          2. 邏輯刪除。即置表中的一個標記字段為已刪除。查詢時不可見,但實際還保留在表中。 好處是不用處理數據被引用的情況。它的缺點是,如果數據沒有被引用,那么它其實可以被物理刪除,但確留在系統中成為垃圾數據;其次在數據有唯一編碼的情況下,被邏輯刪除的數據實際上還占用著一個編碼,有時用戶會疑惑,明明表中查不到這個編碼,我在新增的數據中使用這個編碼卻總提示編碼已存在。

          ??? 各位又是用的什么方法來處理的呢?你的方法有何優缺點,不妨一同討論一下。

          ??

          posted on 2006-09-01 15:20 黑子 閱讀(804) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 万安县| 桓仁| 永平县| 滨海县| 出国| 柯坪县| 靖西县| 石屏县| 常山县| 兴国县| 桃源县| 上蔡县| 屯昌县| 浏阳市| 剑阁县| 中宁县| 兴城市| 府谷县| 都江堰市| 玉溪市| 荥阳市| 乌兰察布市| 巢湖市| 建宁县| 寿阳县| 成都市| 固阳县| 铜川市| 拜泉县| 新和县| 苏尼特右旗| 白朗县| 依兰县| 巫溪县| 高邑县| 梨树县| 怀远县| 蓬溪县| 龙州县| 焦作市| 无为县|