H2触发器崩溃并破坏数据库

时间:2014-12-17 16:43:05

标签: java sql database triggers h2

我在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过程中数据库文件的大小增长很多,并且没有结束,就像无限循环一样!

0 个答案:

没有答案