2011-10-27 13 views
0

MySQLで作成された関数をSpring JdbcTemplateクラスを使用するコードで使用する際に問題があります。function return(MySQL + Spring)

Workbenchで直接関数をテストすると正しく動作し、過去のエントリに応じてtrueまたはfalseが返されます。しかし、Javaコードで結果を取得しようとすると、常にfalseが返されます。これは、これが型変換に失敗したと考えています。

なぜ変数 'result'は常に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)); 
    

    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 =真、0 =偽に注意してください。

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);" 、しかしまた働かなかった。常にresult = 0を取得します。 –

関連する問題