2017-05-02 31 views
0

テーブルにいくつかの値を挿入するH2ストアドプロシージャを作成しようとしています。私のユニットテスト環境では、実際のデータベースよりもインメモリに接続したいので、これをやっています。ここに私が持っているものがあります(私はグルービーではなく、javaであることに注意してくださいが、私はそれが重要だとは思わない)。H2ストアドプロシージャ経由で挿入

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) 
    } 
} 

を次のように

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    
      } 

そして、私の手順がある例はすべて、かなり混乱だったと私はこの権利をやっているかわかりません。ここではエラーがあります

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

(?,?)のデータ値にH2のバージョンを使用している[90012から193]

+0

"例はすべてかなり混乱していました" - > source/url? –

答えて

0

を挿入しますか。?h2にこの問題のバグがあります。 GitHub Bug

この問題を解決するには、最新のバージョンにアップグレードしてください。

PS:コメントを追加するには50の評判が必要ですので、コメントとして追加できませんでした。これが役に立ちますようにお願いします。

関連する問題