H2通过存储过程插入

时间:2017-05-02 16:32:05

标签: java h2

我正在尝试编写H2存储过程以将一些值插入表中。我这样做是因为在我的单元测试环境中,我宁愿连接到内存而不是真正的数据库。这就是我所拥有的(注意我在groovy中这样做,而不是java,但我认为这不重要)。

Sql sql = new Sql(JdbcConnectionPool.create("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "user", "password"))
sql.executeUpdate("CREATE TABLE data (key VARCHAR(255) PRIMARY KEY,value VARCHAR(1023) )")
sql.execute("CREATE ALIAS insertInto FOR \"com.vanguard.fig.batch.core.StoredProcs.insertInto\"")
sql.execute("CALL insertInto(?,?)", val1, val2)
sql.eachRow("Select * From data") { row ->
                println row             
            }

我的程序如下

public class StoredProcs {
    void insertInto(java.sql.Connection con, String val1, String val2) throws Exception {
        String resultValue=null;
        Sql sql = new Sql(con)
        sql.executeInsert("Insert Into data VALUES(?, ?)", val1, val2)
    }
}

这些例子都相当令人困惑,我不确定我是否正确行事。这是错误

WARNING: Failed to execute: CALL insertInto(?,?) because: Parameter "#1" is not set; SQL statement:

插入数据值(?,?)[90012-193]

1 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的h2。 看起来h2有一个针对此问题的错误。 GitHub Bug

请将其升级到最新版本以解决此问题。

PS:我无法将此添加为评论,因为我需要有50个声望来添加评论。希望这有帮助