_test_jdbc_inconsistency
開発システムの MySQL のインスタンスで、次の簡単な手順をテスト スキーマ内で定義しています。
CREATE PROCEDURE _test_jdbc_inconsistency.proc(IN param1 boolean, OUT param2 boolean)
BEGIN
IF (param1 IS NULL)
THEN
SET param2 = NULL;
ELSE
set param2 = not param1;
END IF;
END
しかし、驚いたことに、次の簡単なテストは失敗します
@Test(dataProvider = "connectionPool")
public void testJdbcInconsitencyOutParameterType(Connection con) throws SQLException, IOException
{
con.setCatalog("_test_jdbc_inconsistency");
try (CallableStatement statement = con.prepareCall("{call proc(?, ?)}"))
{
statement.setInt("param1", 5);
statement.registerOutParameter("param2", Types.INTEGER);
statement.execute();
assertTrue(statement.getObject(2) instanceof Integer);
assertEquals(statement.getObject(2), 25);
assertTrue(statement.getObject("param2") instanceof Integer);
}
}
矛盾は最後のassertTrue
ステートメントでフラグが立てられます。parameter-index を受け入れるのオーバーロードを呼び出すと、CallableStatement.getObject
期待される型 ( java.lang.Integer
) の結果が返されますが、 parameter-name を受け入れる他のオーバーロードは、一貫性のない type の結果を返しますjava.lang.Long
。私は符号付き整数を使用しており、JDBC でのout パラメータの使用に関する多くの指示、特にMySQL のドキュメントで提供されているものに基づいているため、プロセスは正しいように見え、これは一貫性のない動作のように見えます。
他の誰かがこの問題を確認できますか?
私の環境:
- Windows 8.1 x64
- JDK 1.8.0_45 (x64/x86)
- MySQL コネクタ/J 5.1.34
- MySQL サーバー 5.6.24
- テストNG 6.9.5