MySQL CallableStatement.getObject具有不一致的行为

时间:2015-07-05 14:19:52

标签: java mysql jdbc callable-statement out-parameters

我在开发系统上的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提供的参数,过程似乎是正确的,这看起来像不一致行为

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

我的环境:

  • Windows 8.1 x64
  • JDK 1.8.0_45(x64 / x86)
  • MySQL Connector / J 5.1.34
  • MySQL Server 5.6.24
  • TestNG 6.9.5

1 个答案:

答案 0 :(得分:0)

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

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