起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2440|回复: 6

[处理中3] Baas自定义SQL查询失败。

[复制链接]

23

主题

64

帖子

174

积分

初级会员

Rank: 2

积分
174
发表于 2016-9-7 14:57:25 | 显示全部楼层 |阅读模式
我在baas的private sql字段写了以下语句:SELECT fBuild FROM view_build  WHERE  fVillage=:village ORDER  BY  fBuild  ASC


在前端页面使用以下代码调用相应的baas:
Model.prototype.baasData3BeforeRefresh = function(event){
        var param123 = this.getElementByXid("select1234").value;
    debugger;
    var data = event.source;
                if(param123!==""){
                data.filters.setVar("village", param123);
                }
        };


跟踪到后台CRUD.java,发现执行了语句JSONObject variables = getVariables(params);以后的结果和例子程序不一致。例子程序在此处可以看到Variables.map.table的内容,但是我的程序显示的是com.sun.jdi.InvocationException occurred invoking method.
在监视窗口看到的不同情况如下图。
例子程序正确的是这样的:


我的错误信息是这样的:


错误信息为:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
        at com.mysql.jdbc.Util.getInstance(Util.java:383)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2002)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
        at com.justep.baas.data.DataUtils.getValueBySQL(DataUtils.java:171)
        at com.justep.baas.action.CRUD.sqlQuery(CRUD.java:61)
        at wygs.Housechoice_action__do.queryBuild(Housechoice_action__do.java:139)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.justep.baas.action.Engine.execAction(Engine.java:82)
        at com.justep.baas.action.Engine.execAction(Engine.java:69)
        at com.justep.baas.servlet.BaasServlet.execService(BaasServlet.java:86)
        at com.justep.baas.servlet.BaasServlet.service(BaasServlet.java:55)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)
2016-09-07 14:43:31 Action[wygs/housechoice_action/queryBuild]执行失败,SQL执行失败,SQL:, params:[]
java.lang.reflect.InvocationTargetException


请问是什么原因?
正确例子.jpg
我的错误提示.jpg

23

主题

64

帖子

174

积分

初级会员

Rank: 2

积分
174
 楼主| 发表于 2016-9-7 15:00:31 | 显示全部楼层
网上说的:
com.sun.jdi.InvocationException occurred invoking (2010-06-04 14:11:45)转载▼
标签: 杂谈         分类: J2EE
调试时候出现com.sun.jdi.InvocationException occurred invoking method
原因:因为hibernate的延迟加载引起
修改:修改hbm映射文件的对象映射lazy="false"

什么意思啊?没看懂
回复 支持 反对

使用道具 举报

23

主题

64

帖子

174

积分

初级会员

Rank: 2

积分
174
 楼主| 发表于 2016-9-7 15:37:15 | 显示全部楼层
刚才又仔细看了
getVariables是CRUD中的一个小方法,完整代码如下:
        //var-开头的参数认为也是变量,variables优先级高于var-
        private static JSONObject getVariables(JSONObject params){
                JSONObject variables = params.getJSONObject("variables");
                if(null==variables) variables = new JSONObject();
                for(String key : params.keySet()){
                        if(key.startsWith(VARIABLE_FLAG)){
                                String varName = key.substring(VARIABLE_FLAG.length());
                                if(!variables.containsKey(varName))variables.put(varName, params.get(key));
                        }else if(!"db".equals(key) && !"sql".equals(key) && !"countSql".equals(key) && !variables.containsKey(key)){
                                variables.put(key, params.get(key));
                        }
                }
                return variables;
        }
单步跟踪发现就是在put variables时出的错。为什么会这样啊?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2016-9-7 15:40:44 | 显示全部楼层
countSql中写返回总记录数的函数了吗?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

23

主题

64

帖子

174

积分

初级会员

Rank: 2

积分
174
 楼主| 发表于 2016-9-7 15:58:11 | 显示全部楼层
jishuang 发表于 2016-9-7 15:40
countSql中写返回总记录数的函数了吗?

没有写。因为不需要啊
回复 支持 反对

使用道具 举报

23

主题

64

帖子

174

积分

初级会员

Rank: 2

积分
174
 楼主| 发表于 2016-9-7 15:58:34 | 显示全部楼层
jishuang 发表于 2016-9-7 15:40
countSql中写返回总记录数的函数了吗?

没有写。因为不需要啊。。。
回复 支持 反对

使用道具 举报

23

主题

64

帖子

174

积分

初级会员

Rank: 2

积分
174
 楼主| 发表于 2016-9-7 16:02:36 | 显示全部楼层
晕,加了countSql就运行正常了。谢谢!!
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 07:45 , Processed in 0.084606 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表