我在开发系统上的MySQL实例中的测试模式_test_jdbc_inconsistency
中定义了以下简单过程
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
声明中标记了不一致;当调用接受参数索引的CallableStatement.getObject
的重载返回预期类型(java.lang.Integer
)的结果时,另一个重载接受参数名称返回类型java.lang.Long
的不一致结果。由于我使用的是有符号整数,并且基于许多使用JDBC的 out参数的指令,特别是MySQL documentation提供的参数,过程似乎是正确的,这看起来像不一致行为
其他人可以确认这个问题吗?
我的环境:
答案 0 :(得分:0)
由于没有评论或回复,我将此报告给MySQL错误数据库,并且已被接受并验证为错误。 以下是感兴趣的人的问题链接: