2011-03-22 86 views
1

我有兩個數據庫。像編輯,插入到其中的變化也需要對第二個進行更改,反之亦然。可以用Java編寫MySQL觸發器或存儲過程嗎?

其實,一個數據庫是一個古老的傳統數據庫(一個非常糟糕的實體關係結構),目前用戶使用的舊版應用程序前端。 第二個數據庫是一個新構建的,更好的重構遺留與一個單獨的應用程序。前端。

我想這兩個應用(訪問所述傳統和分別新數據庫)同時運行,因此用戶可以同時使用的應用程序和改變在一個應用程序的選項越過另一個是可見的。

我希望編寫調用存儲過程,它重組的數據,並把它放在對面的數據庫觸發器。

我的問題是:

  • 是我執行的路線,因爲它應該是什麼?我的意思是,triggers >call> stored procedures >call> database.
  • 可以使用Java編寫觸發器/存儲過程嗎?
  • 有什麼好的/推薦的技巧,教程等在那裏?

上有許多谷歌的鏈接,但他們都不是有用的。我想知道MySQL和Java在MySQL觸發器方面是否一起工作?有沒有可能?有沒有更好的方法來實現我所需要的?

回答

2

觸發器是命名數據庫對象。他們定義了某些與數據庫相關的事件發生時數據庫應該採取的行動。它們是用SQL編寫的。它們的執行對用戶來說是透明的。像往常一樣編寫Java JDBC代碼,DBMS將在必要時自動執行適當的觸發器。

mysql> delimiter // 
mysql> CREATE TRIGGER insert_trigger BEFORE INSERT ON Customer 
    -> FOR EACH ROW 
    -> BEGIN 
    -> UPDATE Customer SET Price=Price-10 WHERE CustomerGroup=32 and CityCode=11; 
    -> END; 
    -> // 

This例子展示瞭如何讓自己的觸發寫入到另一個數據庫。請注意自動增量屬性。

我想你應該忘記在MySQL Java存儲過程,但你總是可以將業務邏輯移動到您自己的Java程序。

+2

我相信你至少在Oracle中仍然可以從存儲過程和觸發器中調用一些Java代碼。不確定關於MySQL。 – 2011-03-22 14:12:01

+0

你說得對。在Oracle中,您可以編寫Java存儲過程並通過觸發器事件調用它們。儘管這在MySQL中不起作用。 – 2011-03-22 15:50:18

相關問題