2014-10-31 79 views
0

在ebean中使用mysql函数查询时会出现什么问题?Ebean在Play Framework中的MySQL存储函数错误

与Ebean在Play框架中的mysql函数。

-mysql版本:5.5.25a(JDBC:5.1.29)

- 播放的版本:在游戏2.3.4

-config ebean

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://ip:3306/db?characterEncoding=UTF-8" 
db.default.user="id" 
db.default.password="pass" 
db.default.logStatements=true 
evolutionplugin=disabled 

-mysql功能

在游戏
CREATE FUNCTION `get_next_seq_val`() RETURNS BIGINT(20) 
BEGIN 

    DECLARE reslutval BIGINT; 
    SET reslutval := 0; 

    UPDATE t_mas_seq 
     SET last_cached_val = last_cached_val+1 
    WHERE seq_nm = 'p_seq_nm'; 

    SELECT last_cached_val INTO reslutval FROM t_mas_seq 
    WHERE seq_nm = 'p_seq_nm'; 

    RETURN reslutval; 

END$$ 

-java SRC ebean

int n = Ebean.createSqlQuery("SELECT get_next_seq_val() seq").findUnique().getInteger("seq"); 

总是'int n'是相同的数字。

回答

0

Ebean在每次出现分号时都会拆分文件,因此不需要用简单的分号来区分查询。 为了防止ebean每个里面有一个分号的时间来分割你的函数的代码,你必须用双分号逃脱分号:

CREATE FUNCTION `get_next_seq_val`() RETURNS BIGINT(20) 
BEGIN 

    DECLARE reslutval BIGINT;; 
    SET reslutval := 0;; 

    UPDATE t_mas_seq 
     SET last_cached_val = last_cached_val+1 
    WHERE seq_nm = 'p_seq_nm';; 

    SELECT last_cached_val INTO reslutval FROM t_mas_seq 
    WHERE seq_nm = 'p_seq_nm';; 

    RETURN reslutval;; 

END; 

参见:MySQL delimiter statement error