Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java H2触发器不';t触发器_Java_Jdbc_Triggers_H2 - Fatal编程技术网

Java H2触发器不';t触发器

Java H2触发器不';t触发器,java,jdbc,triggers,h2,Java,Jdbc,Triggers,H2,所以我试图创建一个H2触发器,它应该在执行Insert查询之前触发,因为我需要在一个SQL表中设置一个ID,我需要在另一个表中首先创建一个ID 应该在其中插入的表如下所示: CREATE TABLE IF NOT EXISTS INGREDIENTS( ID INT NOT NULL, Name VARCHAR(50), ALK INT check (ALK <= 100 and ALK >= 0), CalPerHundred INT, PRICE DOUBLE check(PRI

所以我试图创建一个H2触发器,它应该在执行Insert查询之前触发,因为我需要在一个SQL表中设置一个ID,我需要在另一个表中首先创建一个ID

应该在其中插入的表如下所示:

CREATE TABLE IF NOT EXISTS INGREDIENTS(
ID INT NOT NULL,
Name VARCHAR(50),
ALK INT check (ALK <= 100 and ALK >= 0),
CalPerHundred INT,
PRICE DOUBLE check(PRICE>=0),
FOREIGN KEY (ID) REFERENCES ITEM(ID)
);
触发器的代码:

CREATE TRIGGER IF NOT EXISTS ING_TRIGGER
BEFORE INSERT
ON INGREDIENTS
FOR EACH ROW
CALL "Partyplaner.Persistence.Trigger.IngredientsTrigger";
public class IngredientsTrigger implements Trigger {

    private Logger LOGGER = LoggerFactory.getLogger(IngredientsTrigger.class);

    @Override
    public void init(Connection conn, String schemaName,
                     String triggerName, String tableName, boolean before, int type)
            throws SQLException {
        LOGGER.debug("hello im init");
    }

    @Override
    public void fire(Connection conn, Object[] oldRow, Object[] newRow)throws SQLException {

        LOGGER.debug("hello im fire");
        PreparedStatement pstmt_key;
        try {
            pstmt_key = conn.prepareStatement("INSERT INTO ITEM () VALUES ()");
        } catch (SQLException e) {
            throw e;
        }
        pstmt_key.executeUpdate();
        ResultSet generatedKeys = pstmt_key.getGeneratedKeys();
        generatedKeys.next();

        int id = generatedKeys.getInt(1);

        generatedKeys.close();

        newRow[0]=id;



    }

    @Override
    public void close() throws SQLException {}

    @Override
    public void remove() throws SQLException {}
}
我可以在H2 WebInterface中看到触发器,但是当我尝试插入一个成分时,我得到一个SQL错误,它说ID不允许为NULL;但这正是触发器应该做的吗?我只看到来自触发器的init log消息,因此我相对感到很抱歉,它没有被调用,我在创建文件中检查了5次类路径,甚至让它用Trigger.class.getName()打印


我使用的是Maven和Spring,这可能是因为类路径必须是其他的吗?

好的,答案很简单,我必须从表中删除NOTNULL注释,现在一切都正常了