NutzCN Logo
问答 Sql拼接出问题啦!
发布于 2159天前 作者 疯子 1749 次浏览 复制 上一个帖子 下一个帖子
标签:

先贴报错:

18-05-27 04:30:41.538 WARN [http-nio-8080-exec-1] Error@/admin/member-list :
org.nutz.dao.DaoException: !Nutz SQL Error: 'SELECT COUNT(*) FROM user  WHERE '
PreparedStatement: 
'SELECT COUNT(*) FROM user  WHERE '

看,多了WHERE

String cusername = "";
		SqlExpressionGroup sg = Cnd.exps(Cnd.expEX("username", "like", cusername)).orEX("email", "like", cusername)
				.orEX("nickname", "like", cusername);
		Cnd cnd = Cnd.where(sg);
		System.out.println(cnd.toString());

打印结果:WHERE

6 回复

为了能使用链式,并且忽略空,所以只有用下面这个方法咯。

/**
     * 将一个条件表达式封装为条件表达式组
     * @param exp 原本的条件表达式
     * @return 条件表达式组
     */
    public static SqlExpressionGroup exps(SqlExpression exp) {
        return new SqlExpressionGroup().and(exp);
    }

如果用这个方法:

public static SqlExpressionGroup exps(String name, String op, Object value)

那就不能忽略空值了。
在我所有的值都是空的情况下,where并没有省略。
有点尴尬。。。。。。

有没有一种更加骚的写法呢?
like:

whereEx(user,"username|password");

哈哈,反正我是小白,至于实现有多难我不知道 =,=
如果以后真有这个方法,希望还能去实体类找一波注解,可能表字段与属性名不一致,生成sql出问题就不好了。

ps:想在深圳找份工作,那种不看学历的。。。
我很勤奋好学的!你看,大半夜还在研究学习。
.. .. . ...
说不定哪个大公司架构师看中收我为徒了呢
哈哈哈 ๑乛◡乛๑

System.out.println(Cnd.where(Cnd.expEX("username", "=", "")).toString());

这句代码打印值是空的,没有留下where!
看来,where(条件表达式组)这种形式是必定会留下where关键字的。。。
因此:

Cnd.where(Cnd.expEX("username", "like", "")).orEX("email", "like", "");

其实也更加轻便哈,很无奈啊~

然而,很快又打脸了。。。

SqlExpressionGroup g = null;
		Cnd cnd = Cnd.where(g);

此处 cnd 打印出来也没有where
奇怪哈.............

SqlExpressionGroup有setTop方法

问题是,这跟自定义sql有什么关联性?你给出的信息没看到相关性

@wendal 我错了老大。。以后尽量少发黑帖=,=

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