在Java中执行MySQL存储过程
我试图使用jdbcTemplate执行一个存储过程,但我一直收到一个错误,说GetEvents需要0个参数。有人能解释一下为什么或者有更好的方法来执行这个存储过程吗 我得到的错误是:在Java中执行MySQL存储过程,java,mysql,stored-procedures,Java,Mysql,Stored Procedures,我试图使用jdbcTemplate执行一个存储过程,但我一直收到一个错误,说GetEvents需要0个参数。有人能解释一下为什么或者有更好的方法来执行这个存储过程吗 我得到的错误是: org.springframework.dao.InvalidDataAccessApiUsageException:SQL[调用GetEvents(?,?)]:给定了3个参数,但应为0 程序 mysql> CREATE PROCEDURE GetEvents(IN search_table VARCHAR(
org.springframework.dao.InvalidDataAccessApiUsageException:SQL[调用GetEvents(?,?)]:给定了3个参数,但应为0 程序
mysql> CREATE PROCEDURE GetEvents(IN search_table VARCHAR(255), IN start TIMESTAMP, IN end TIMESTAMP)
-> BEGIN
-> SELECT COUNT(*)
-> FROM search_table
-> WHERE time >= start AND time <= end;
-> END //
Query OK, 0 rows affected (0.02 sec)
mysql>创建过程GetEvents(在搜索表VARCHAR(255)、开始时间戳、结束时间戳中)
->开始
->选择计数(*)
->从搜索表
->其中时间>=开始和时间结束//
查询正常,0行受影响(0.02秒)
爪哇
public int getEnterExitsAll(日期时间开始,日期时间结束){
Map params=新的HashMap();
参数put(“搜索表格”,表格ENEX);
参数put(“start”,start.toString());
参数put(“end”,end.toString());
返回模板.queryForInt(“调用GetEvents(?,?)”,参数);
我怀疑,这是因为变量命名(end
是保留关键字)。请尝试将end
重命名为endTime
并将start
重命名为startTime
或类似的名称。我已更正,但仍然看到相同的错误。您是否曾设法通过调用找到问题?
public int getEnterExitsAll(DateTime start, DateTime end) {
Map<String, String> params = new HashMap<String, String>();
params.put("search_table", TABLE_ENEX);
params.put("start", start.toString());
params.put("end", end.toString());
return template.queryForInt("CALL GetEvents(?, ?, ?)", params);