NutzCN Logo
精华 Nutz有对数据库函数function和存储过程procedure的对应类吗?
发布于 3338天前 作者 qq_c5d134a9 2603 次浏览 复制 上一个帖子 下一个帖子
标签: dao

问题如上,现在一个项目需要调用数据库中的函数,返回结果,不知道nutz有没有这方面的类或者接口

6 回复

dao.func和dao.func2

存储过程走自定义sql

来自炫酷的 NutzCN

@wendal nutzDao 对数据库自定义函数要怎么调用呢
比如我写了一个生成md5的函数 fn_m_md5,需要传一个字符串参数用于md5加密,返回一个加密后的md5字符串,
目前我看func,和func2都是支持对某个表的字段的操作,请问上述的场景要怎么做?

自定义sql不就好了 @qq_6d1ec279

来自炫酷的 NutzCN

@wendal 自定义sql也不行
Sql sql = Sqls.create("{?=call fn_m_md5(@str)}");
String ret = null;
sql.params().set("str", "hi");
super.dao().execute(sql);
return sql.getObject(String.class);
以上写法报以下错误;

Nutz SQL Error: '{'hi'=call fn_m_md5()}'
PreparedStatement:
'{?=call fn_m_md5(?)}'
CaseMessage=索引中丢失 IN 或 OUT 参数:: 2

   Sql sql = Sqls.create("{@ret=call fn_m_md5(@str)}");
    String ret = null;
    sql.params().set("str", "hi");
    sql.params().set("ret", ret);

    super.dao().execute(sql);
    System.out.println(ret);
    return sql.getObject(String.class);

这种写法也取不到值;

21:13:50.416 [ServerMain-Provider] INFO o.n.dao.impl.sql.run.NutDaoExecutor - Can't identify SQL type : {NULL=call fn_m_md5('hi')}
21:13:50.448 [ServerMain-Provider] DEBUG o.n.dao.impl.sql.run.NutDaoExecutor - {NULL=call fn_m_md5('hi')}
21:13:50.588 [ServerMain-Provider] DEBUG o.s.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
null

自定义SQL不支持出参的,而且那ret写法完全不可行(把一个String参数传出去还想改变原本变量的值,异想天开啊)

Sql sql = Sqls.fetchString("select fn_m_md5(@str)");
sql.params().set("str", "hi");
dao().execute(sql);
System.out.println(sql.getString());

    Sql sql = Sqls.fetchString("select fn_m_md5(@str) from dual");
    sql.params().set("str", "hi");
    dao().execute(sql);
    return sql.getObject(String.class);

这种写法是对的,之前一直绕在call的写法里面去了,出不来了,对nutz的自定义sql理解还是不到位;

添加回复
请先登陆
回到顶部