1

我在测试模式中定义了以下简单过程_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语句上被标记;在调用CallableStatement.getObject接受参数索引的重载返回预期类型 ( java.lang.Integer) 的结果时,另一个接受参数名称的重载返回类型不一致的结果java.lang.Long。由于我使用有符号整数并基于许多关于使用JDBC使用out 参数的说明,特别是MySQL 文档提供的那个,因此该过程似乎是正确的,这看起来像是一种不一致的行为

其他人可以确认这个问题吗?

我的环境:

  • 视窗 8.1 x64
  • JDK 1.8.0_45 (x64/x86)
  • MySQL 连接器/J 5.1.34
  • MySQL 服务器 5.6.24
  • 测试NG 6.9.5
4

1 回答 1

0

由于没有评论或回应,我将此报告给 MySQL 错误数据库,它已被接受并验证为错误。以下是该问题的链接,供感兴趣的人使用:

https://bugs.mysql.com/?id=77766

于 2015-07-26T14:46:09.493 回答