如何返回mysql函数select count

时间:2016-05-24 23:50:03

标签: java mysql

我想使用mysql函数获取sql select的计数值。函数执行时没有错误但是当我尝试使用java获取值时会出现以下错误。

  

25-May-2016 05:14:02.180严重[http-nio-8084-exec-109]   CORE.ApplicationMgt.Get_New_Application_Count为null   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知   '字段列表'中的列'temp'

这是mysql功能

DELIMITER //
CREATE FUNCTION APPLICATION_API_Get_New_Application_Count() RETURNS INTEGER
BEGIN
IF((SELECT COUNT(*) AS temp FROM application_view WHERE status = 'NEW')>0) THEN
    RETURN temp;
END IF;

RETURN 0;

END//

这是函数调用点

public int Get_New_Application_Count() {
        CallableStatement stmt;
        int temp_ = 0;
        try {
            stmt = MySqlManager.getDbConnection().prepareCall("{ ? = call APPLICATION_API_Get_New_Application_Count()}");

            stmt.registerOutParameter(1, java.sql.Types.INTEGER);
            stmt.execute();
            temp_ = stmt.getInt(1);

        } catch (SQLException ex) {
            Logger.getLogger(PermissionSetMgt.class.getName()).log(Level.SEVERE, null, ex);
        }
        return temp_;
    }

这是表格

CREATE TABLE IF NOT EXISTS application_tab (
        nic                 VARCHAR(10)     NOT NULL,
        apply_degree        VARCHAR(45)     NOT NULL,
        user_email          VARCHAR(60)     NOT NULL,
        title               VARCHAR(10)     NOT NULL,
        initials            VARCHAR(15)     NULL,
        name_from_initials  VARCHAR(100)    NULL,
        first_name          VARCHAR(45)     NULL,
        middle_name         VARCHAR(45)     NULL,
        last_name           VARCHAR(45)     NULL,
        birth_day           DATE            NOT NULL,
        gender              VARCHAR(1)      NOT NULL,
        civil_status        VARCHAR(15)     NOT NULL,
        course_type         VARCHAR(25)     NOT NULL,
        com_lit_opt1        VARCHAR(2)      NOT NULL,
        com_lit_opt2        VARCHAR(2)      NOT NULL,
        com_lit_opt3        VARCHAR(2)      NOT NULL,
        com_lit_opt4        VARCHAR(2)      NOT NULL,
        designation         VARCHAR(50)         NULL,
        org_name            VARCHAR(50)         NULL,
        appointed_date      DATE                NULL,
        status              VARCHAR(15)     NOT NULL,
  PRIMARY KEY (nic, apply_degree));

这是此表中的视图

CREATE OR REPLACE VIEW application_view AS
    SELECT  nic                 nic,
            apply_degree        apply_degree,
            user_email          user_email,
            title               title,
            initials            initials,
            name_from_initials  name_from_initials,
            first_name          first_name,
            middle_name         middle_name,
            last_name           last_name,
            birth_day           birth_day,
            gender              gender,
            civil_status        civil_status,
            course_type         course_type,
            com_lit_opt1        com_lit_opt1,
            com_lit_opt2        com_lit_opt2,
            com_lit_opt3        com_lit_opt3,
            com_lit_opt4        com_lit_opt4,
            designation         job,
            org_name            organization_name,
            appointed_date      appointed_date,
            status              status
    FROM application_tab;

2 个答案:

答案 0 :(得分:3)

这个问题与java无关,你的mysql函数不正确。

首先,该函数与if过分复杂。如果返回的计数为零,那么您仍然可以返回计数而不是特定的数字。

其次,你在函数中没有临时变量,所以没有任何东西可以返回。

我只是声明一个整数变量,将计数读入其中并返回变量的值:

...
declare temp int;
SELECT COUNT(*) into temp FROM application_view WHERE status = 'NEW';
return temp;
...

答案 1 :(得分:0)

问题似乎是由于temp无法访问SELECT COUNT(*) AS temp中的RETURN temp;列而引起的。

为什么不完全抛弃IF条件,因为如果计数不大于0,你只是返回'0' - 在这种情况下它只会是0 ......?