我想使用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;
答案 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 ......?