调用sql函数原创
金蝶云社区-吴锐雄
吴锐雄
4人赞赏了该文章 1,655次浏览 未经作者许可,禁止转载编辑于2021年12月22日 10:54:19

看完文章,请点赞收藏,谢谢您嘞


在使用DB类查询数据时,使用 普通的sql函数或者自定义函数来查询数据。


tk_kdec_t_bill_1这张表的数据:

image.png


使用sql函数

使用isnull函数的案例:

DBRoute dbRoute = DBRoute.of("secd");

String isnullSQL = "select fid, fbillno, isnull(fk_kdec_decimalfield, 0.00) + 0.001 as deci from tk_kdec_t_bill_1";
Object[] params = {};
Object object = DB.query(dbRoute, isnullSQL, params, new ResultSetHandler<Object>() {
    @Override
    public Object handle(ResultSet resultSet) throws Exception {
        List<Map> list = new ArrayList<>();
        while (resultSet.next()) {
            Object fbillno = resultSet.getObject("fbillno");
            Object fid = resultSet.getObject("fid");
            Object fdecimalfield = resultSet.getObject("deci");

            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("fbillno", fbillno);
            hashMap.put("fid", fid);
            hashMap.put("deci", fdecimalfield);
            list.add(hashMap);
        }
        return list;
    }
});

for (Map map : (List<Map>)object) {
    Object fbillno = map.get("fbillno");
    Object fid = map.get("fid");
    Object fdecimalfield = map.get("deci");
    System.out.println("tk_kdec_t_bill_1: " + "fbillno-"+fbillno.toString()+"/"
            +"fid-"+fid.toString()+"/"
            +"deci-"+fdecimalfield.toString()+"/");
}


打印的日志结果:

image.png


使用自定义函数

在mysql终端里面创建了一个名为 myf的函数,用来统计 表行数

image.png

终端执行这个函数的结果:

image.png


在代码里面调用这个自定义函数,加上 /*dialect*/ 就可以使用这个自定义函数了,在调用时,必须确保 数据库里面有这个函数

案例如下:

//构建 扩展开发库的DBRoute 
DBRoute dbRoute = DBRoute.of("secd");
String customSQL = "/*dialect*/ select myf() as billmess";
DynamicObjectCollection dialectObjects = (DynamicObjectCollection)DB.query(dbRoute, customSQL, null, new ResultSetHandler<Object>() {
    @Override
    public Object handle(ResultSet resultSet) throws Exception {
        DynamicObjectCollection objects = new DynamicObjectCollection();
        while (resultSet.next()) {
            Object billmess = resultSet.getObject("billmess");
            System.out.println("result:" + billmess);

            DynamicObjectType dynamicObjectType = new DynamicObjectType("bill");
            DynamicSimpleProperty dynamicSimpleProperty = new DynamicSimpleProperty("billmess", Integer.class, null);
            dynamicObjectType.addProperty(dynamicSimpleProperty);
            DynamicObject dynamicObject = new DynamicObject(dynamicObjectType);
            dynamicObject.set("billmess", billmess);
            objects.add(dynamicObject);
        }
        return objects;
    }
});


最终会打印出结果和终端的执行结果一致:

image.png



赞 4