2011-10-27 69 views
0

我在使用通過使用Spring JdbcTemplate類的代碼在MySQL中創建的函數時遇到問題。函數返回(MySQL + Spring)

當我在Workbench中直接測試函數時,它可以正常工作,根據過去的條目返回true或false。但是,當我嘗試通過Java代碼獲取結果時,總是返回false,這導致我認爲這是某種類型轉換失敗。

爲什麼變量'result'總是假?

  • 功能

    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)); 
    

    END

  • 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); 
    

回答

0

的MySQL boolean是的別名。
這意味着您使用的是正確的類型。

請注意,1 = true,0 = false。

所以,如果你想在你的java代碼中得到結果,你所要做的就是測試返回值與0的對應關係。

更改Java代碼:

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

我很欣賞你的反應,但沒有奏效。繼續返回false。利用你的想法,我將代碼改爲「boolean result =(getJdbcTemplate()。queryForInt(」SELECT COMPARA_QTDE_EMPRESA(?,?,?,?)「),args,tipos)!= 0);」 ,但也沒有工作。總是得到結果= 0。 –