我在H2数据库上运行Trigger时遇到问题。 触发器应覆盖表格中的2种情况(INSERT和UPDATE)。
此过程涉及以下两个表:
Betellposition (bestellnr(PK),bestellposnr(PK),artikelnr(FK),menge,summe)
和
Artikel (artikelnr(PK),bezeichnung,preis,artikelgrnr(FK))
触发器应计算金额(Menge)*价格(Preis)之和(Summe) 如果你在Bestellposition进行INSERT或UPDATE(更改文章(Artikel)或金额(Menge))。
以下是触发器的代码:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.h2.api.Trigger;
public class TriggerBestellpositionSumme implements Trigger {
@Override
public void close() throws SQLException {}
@Override
public void fire(Connection con, Object[] oldRow, Object[] newRow)
throws SQLException {
int neueBestellnr = 0;
int neueBestellposnr = 0;
int neueArtikelnr = 0;
neueBestellnr = (int) newRow[0];
neueBestellposnr = (int) newRow[1];
neueArtikelnr = (int) newRow[2];
PreparedStatement prep = con.prepareStatement
("update bestellposition set summe = menge * "
+ "(select artikel.preis from artikel where artikel.artikelnr = ?) "
+ "where bestellnr = ? and bestellposnr = ?");
prep.setInt(1, neueArtikelnr);
prep.setInt(2, neueBestellnr);
prep.setInt(3, neueBestellposnr);
prep.execute();
}
@Override
public void init(Connection con, String schemaName, String triggerName, String tableName,
boolean before, int type) throws SQLException {}
@Override
public void remove() throws SQLException {}
}
INSERT工作正常。 UPDATE语句只有一个问题。 对于INSERT或UPDATE,fire()方法中的功能必须相同。
如果我尝试在Bestellposition上进行UPDATE,它会停止加载,我必须终止该应用程序。在此之后,我的数据库被销毁。 也许这是一个错误或其他东西。我无法弄清楚问题。
我希望有人能帮助我。
编辑:我注意到UDPATE过程中数据库文件的大小增长很多,并且没有结束,就像无限循环一样!