【问题标题】:function return (MySQL + Spring)函数返回(MySQL + Spring)
【发布时间】:2011-10-27 10:10:19
【问题描述】:

我在使用通过使用 Spring JdbcTemplate 类的代码在 MySQL 中创建的函数时遇到问题。

当我直接在 Workbench 中测试功能是否正常工作时,根据过去的条目返回 true 或 false。但是,当我尝试通过 Java 代码获取结果时,总是返回 false,这让我相信这是某种类型转换失败。

为什么变量“结果”总是假的?

  • 功能

    CREATE DEFINER=`root`@`localhost` 
    FUNCTION `COMPARA_QTDE_EMPRESA`(AG INT, P INT, ANO INT, AINSERIR INT) 
    RETURNS tinyint(1) DETERMINISTIC  
    BEGIN  
      DECLARE TOTAL_EMPRESA_PESQUISA INT;  
      DECLARE TOTAL_EMPRESA_AGENTE INT;  
    
      SELECT IF(COUNT(*), EP.TOTAL, 0) INTO TOTAL_EMPRESA_PESQUISA  
        FROM CTRLPRODUCAO.EMPRESA_PESQUISA EP  
        WHERE EP.AGENCIA = AG  
        AND EP.PESQUISA = P  
        AND EP.ANO = ANO;  
    
      SELECT IFNULL(SUM(EA.TOTAL), 0) INTO TOTAL_EMPRESA_AGENTE  
        FROM CTRLPRODUCAO.EMPRESA_AGENTE EA  
        WHERE EA.AGENCIA = AG  
        AND EA.PESQUISA = P  
        AND EA.ANO = ANO;  
    
      RETURN 
        IF(TOTAL_EMPRESA_PESQUISA = 0
           , FALSE
           ,(TOTAL_EMPRESA_PESQUISA < (TOTAL_EMPRESA_AGENTE) + AINSERIR));  
    

    结束

  • Java 代码

    (...)  
    Object[] args = new Object[4];  
    int[] tipos = new int[4];  
    args[0] = ag.getId();   tipos[0] = Types.INTEGER;  
    args[1] = p.getId();   tipos[1] = Types.INTEGER;  
    args[2] = ano.getAno();   tipos[2] = Types.INTEGER;  
    args[3] = total.getTotal();   tipos[3] = Types.INTEGER;  
    
    boolean result = (Boolean)getJdbcTemplate().queryForObject("SELECT COMPARA_QTDE_EMPRESA (?, ?, ?, ?)"), args, tipos, Boolean.class);
    

【问题讨论】:

    标签: mysql spring function jdbctemplate


    【解决方案1】:

    MySQL booleantinyint(1) 的别名。
    这意味着您使用的是正确的类型。

    请注意,1 = 真,0 = 假。

    所以如果你想在你的java代码中得到结果,你所要做的就是根据0测试返回值。

    把java代码改成:

    boolean result = (getJdbcTemplate().queryForObject("SELECT COMPARA_QTDE_EMPRESA (?, ?, ?, ?)")
                                                       , args, tipos, Integer.class) != 0);
    

    【讨论】:

    • 感谢您的回复,但没有奏效。继续返回假。利用您的想法,我将代码更改为“boolean result = (getJdbcTemplate().queryForInt("SELECT COMPARA_QTDE_EMPRESA (?, ?, ?, ?)"), args, tipos) != 0);" ,但也没有用。总是得到结果 = 0。
    猜你喜欢
    • 2013-09-06
    • 2015-08-25
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2013-02-16
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多