查看: 1262|回复: 4

视图 SQL 执行失败报错 fileter拼接失败

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-8-23 14:25:48 | 显示全部楼层 |阅读模式
本帖最后由 szhtest 于 2024-8-24 17:09 编辑

我的门户页面有一个查询按钮,点击调用该Getemployee脚本传参给视图的SQL。查询按钮的click有写this.Getemployee()调用脚本,门户页面预加载也有配置这个脚本




返回fileterList拼接到视图的sql 查询语句后



现在fileterList若为空(控件中均不填写任何值就点击查询),执行出来的查询数据是没问题的,但一旦我填写了值,传送了过滤条件就报错了
前端打印的fileterList及视图SQL打印的this.par我看了看好像并没有发现什么问题?但是我不明白,为何在视图语句里print(this.fileterList)是undefined,print(this.par)却有值(值正常)
20844的错误不用管(已解决),现在是报: (net.sf.jsqlparser.statement.select.SubSelect and net.sf.jsqlparser.schema.Table are in unnamed module of loader 'app'), exception:java.lang.ClassCastException, id:854eef8a-beef-4a3e-ac22-e8da6bedc279, name:com.x.query.assemble.surface.jaxrs.statement.StatementAction, message:class net.sf.jsqlparser.statement.select.SubSelect cannot be cast to class net.sf.jsqlparser.schema.Table (net.sf.jsqlparser.statement.select.SubSelect and net.sf.jsqlparser.schema.Table are in unnamed module of loader 'app')

日志管理器显示我的print(SQL)是没有拼接过的(就还是我var sql的原始语句)?为何日志管理器会给我报这个错?


视图里的SQL没有包括最后一句where,只写到 as a


查了下报错说是ClassCastException 异常。系统尝试将一个 net.sf.jsqlparser.statement.select.SubSelect 对象强制转换为 net.sf.jsqlparser.schema.Table 对象。而且如果我不传过滤条件的话,查询是成功的。只要传的fileterList不为空就报错了,我不理解是我写的哪里出了问题?


我不太理解我传过来的这个fileterList是自动接到原有的SQL后面的吗?是在return SQL后面给我拼接上了fileterList转化的语句导致了报错吗?
我这个this.par是怎么获取到的?看起来是从我传递过来的fileterList拿的值啊,this.par.公司 = '%检测%'没错

是我哪里写的有问题导致视图一旦自动拼接上fileterList就发生报错?我如果只传view.Setfileter(fileterList(等于一个空数组),par),然后视图SQL里自行用par拼接出筛选语句是不会报错的





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2024-8-26 10:36:33 | 显示全部楼层
fileterList是会自动在查询里拼接上,所以查询语句不能是很复杂的,不然系统不知道如何拼接,您的sql语句完整的发出来看看
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-8-26 14:56:31 | 显示全部楼层
本帖最后由 szhtest 于 2024-8-27 14:20 编辑
论坛管理员 发表于 2024-8-26 10:36
fileterList是会自动在查询里拼接上,所以查询语句不能是很复杂的,不然系统不知道如何拼接,您的sql语句完 ...

就是帖子里的第五张图、以及第四张图打印出sql语句的那部分就是我的 var SQL。

不过我在视图SQL里没有写第五张图where部分,就只写到了 as a  (最后这里保证有留下空格了),即第四张图日志管理器打印出的SQL的那部分。然后本来应当在 as a 后面自动拼接 where+过滤条件的把?他就一直报错了。

是我的SQL太复杂吗?系统是如何识别fileter然后拼接上原本的SQL的?我以为是直接在sql结尾后直接拼接的
回复

使用道具 举报

升级   100%

139

主题

1万

回帖

4万

积分

超级版主

Rank: 8Rank: 8

积分
41458
发表于 2024-8-28 09:32:09 | 显示全部楼层
不会在这里拼上,是传入后端后自动拼的    简单的select * from 表名这种是可以的,但是您贴图的这么复杂的是不行的,需要传参数,然后自己用脚本拼sql语句
回复

使用道具 举报

升级   0.1%

136

主题

241

回帖

10

积分

注册会员

Rank: 2

积分
10
发表于 2024-8-28 09:40:18 | 显示全部楼层
论坛管理员 发表于 2024-8-28 09:32
不会在这里拼上,是传入后端后自动拼的    简单的select * from 表名这种是可以的,但是您贴图的这么复杂的 ...

明白了,难怪我在return sql前打印sql都是初始的

请问语句是哪里复杂就拼接不了呢?是在select字段这里还是说from 表后面不要带太多语句的。
如果是select 简单几个字段 from 但是左联了好几张表的这种行吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表
viewthread