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

QQ登录

只需一步,快速开始

查看: 2147|回复: 13

[结贴] 解码出错, 类型"[String, String]"不匹配

[复制链接]

51

主题

268

帖子

496

积分

中级会员

Rank: 3Rank: 3

积分
496
QQ
发表于 2014-5-5 23:25:09 | 显示全部楼层 |阅读模式
执行代码:
Table busiAcctDataTable = KSQL.select("SELECT " + busiAcctConcept + ".* FROM " + busiAcctConcept + " " + busiAcctConcept + " WHERE 1=2",
                                null, busiAcctDataModel, null);
                Iterator<Row> rows = itemTable.iterator();

                while (rows.hasNext()) {
                        Row row = rows.next();
                        Row newbusiAcctDataRow = busiAcctDataTable.appendRow();
                        newbusiAcctDataRow.setInteger("version", 0);
                        newbusiAcctDataRow.setString("gProcessCode", gProcessCode);
                        newbusiAcctDataRow.setString("gProcessName", gProcessName);
                        newbusiAcctDataRow.setString("gDirection", direction);
                        newbusiAcctDataRow.setString("yDocCode", row.getString("yDocCode"));
                        newbusiAcctDataRow.setDate("yDocDate", row.getDate("yDocDate"));
                        newbusiAcctDataRow.setString("yRowID", row.getString("yRowID"));
                        newbusiAcctDataRow.setString("yPeriodID", DateUtils.dateToStr(row.getDate("yDocDate")).substring(0, 7));
                        newbusiAcctDataRow.setDateTime("yTimeStamp", CommonUtils.getCurrentDateTime());
                        newbusiAcctDataRow.setInteger("fDigit", row.getInteger(relationNum));
                        for (Map.Entry<String, String> rm : relationsMap.entrySet()){
                                newbusiAcctDataRow.setString(rm.getKey(), row.getString(rm.getValue()));
                        }
                }
                BizDataUtils.save(busiAcctDataTable, busiAcctConcept, null, null, null, null, null, busiAcctDataModel, null);


到了这一行,BizDataUtils.save(busiAcctDataTable, busiAcctConcept, null, null, null, null, null, busiAcctDataModel, null);继续执行报错:

Caused by: com.justep.exception.BusinessException: 编码: JUSTEP150210; 提示: 执行KSQL出错, KSQL: INSERT INTO BA_StorageDetailAcct BA_StorageDetailAcct(BA_StorageDetailAcct, BA_StorageDetailAcct.version, BA_StorageDetailAcct.gProcessCode, BA_StorageDetailAcct.gProcessName, BA_StorageDetailAcct.gDirection, BA_StorageDetailAcct.yDocCode, BA_StorageDetailAcct.yDocDate, BA_StorageDetailAcct.fCompanyID, BA_StorageDetailAcct.fCompanyCode, BA_StorageDetailAcct.fMatID, BA_StorageDetailAcct.fMatCode, BA_StorageDetailAcct.fStID, BA_StorageDetailAcct.fStCode, BA_StorageDetailAcct.yBatchCode, BA_StorageDetailAcct.fDigit, BA_StorageDetailAcct.yPeriodID, BA_StorageDetailAcct.yTimeStamp) VALUES (:BA_StorageDetailAcct, :version, :gProcessCode, :gProcessName, :gDirection, :yDocCode, :yDocDate, :fCompanyID, :fCompanyCode, :fMatID, :fMatCode, :fStID, :fStCode, :yBatchCode, :fDigit, :yPeriodID, :yTimeStamp)
        at com.justep.exception.BusinessException.create(Unknown Source)
        at com.justep.system.data.impl.TableUtilsImplement.ksqlInsert(Unknown Source)
        at com.justep.system.data.impl.TableUtilsImplement.ksqlExecuteUpdate(Unknown Source)
        at com.justep.system.data.KSQL.executeUpdate(Unknown Source)
        at com.justep.system.data.KSQL.executeUpdate(Unknown Source)
        at com.justep.system.data.impl.TableImpl.insert(Unknown Source)
        at com.justep.system.data.impl.TableImpl.save(Unknown Source)
        at com.justep.system.data.impl.TableImpl.save(Unknown Source)
        at com.justep.system.data.BizData.save(Unknown Source)
        at com.wujx.system.data.BizDataUtils.save(BizDataUtils.java:53)
        at com.wujx.business.acct.BusiAcctUtils.exeDetailBusiAcct(BusiAcctUtils.java:259)
        at com.wujx.business.acct.BusiAcctUtils.exeBusiAcct(BusiAcctUtils.java:131)
        at com.wujx.business.acct.BusiAcctUtils.exeBusiAcctInterface(BusiAcctUtils.java:74)
        at com.wujx.business.utils.PostDocUtils.exePostDoc(PostDocUtils.java:37)
        at PurchaseInStorageProcess.purchaseInStorageProcessAfterSaveCL_PurchaseInStorageHdAction(PurchaseInStorageProcess.java:42)
        ... 26 more
Caused by: com.justep.exception.BusinessException: 编码: JUSTEP150119; 提示: "AC9CAB8A87534DBEA7ED7E5DA2A4AB53:"解码出错, 类型"[String, String]"不匹配
        at com.justep.exception.BusinessException.create(Unknown Source)
        at com.justep.util.Utils.check(Unknown Source)
        at com.justep.model.ModelUtils.decode(Unknown Source)
        at com.justep.system.ksql.visitor.SQLVisitor.normalizeDim(Unknown Source)
        at com.justep.system.ksql.visitor.InsertVisitor.visit(Unknown Source)
        at com.justep.system.ksql.node.InsertSentence.accept(Unknown Source)
        ... 40 more

AC9CAB8A87534DBEA7ED7E5DA2A4AB53 这个值是yRowID的值。这个是String类型的,没错哦。但不知道为什么报错

17

主题

355

帖子

772

积分

高级会员

Rank: 4

积分
772
QQ
发表于 2014-5-5 23:43:18 | 显示全部楼层
你先写一个固定的sql执行一下,直接去yRowID试试。
一步一步走向那迦南地......
回复 支持 反对

使用道具 举报

45

主题

4492

帖子

3960

积分

论坛元老

Rank: 8Rank: 8

积分
3960
QQ
发表于 2014-5-6 00:18:50 | 显示全部楼层
两个都是string 类型的,出错真是不应该;
你可以这样操作试试,
将你的ksql 与SQL分别输出到控制台,然后选择执行一下看看不会不出错;

KSQL与SQL的输出,需要修改配置,参考下面的贴子 7楼
http://bbs.justep.com/thread-33524-1-1.html
向前进,向前进,我们……
回复 支持 反对

使用道具 举报

310

主题

4938

帖子

4767

积分

论坛元老

Rank: 8Rank: 8

积分
4767
QQ
发表于 2014-5-6 07:54:07 | 显示全部楼层
楼主你写的这个 WHERE 1=2,就是说返回的表是没有数据的;如果返回有数据的table测试下呢?
QQ:179785966
回复 支持 反对

使用道具 举报

51

主题

268

帖子

496

积分

中级会员

Rank: 3Rank: 3

积分
496
QQ
 楼主| 发表于 2014-5-6 09:20:48 | 显示全部楼层
fpj 发表于 2014-5-6 00:18
两个都是string 类型的,出错真是不应该;
你可以这样操作试试,
将你的ksql 与SQL分别输出到控制台,然后 ...

打印KSQL和SQL已经配置过了。平时都能打印出来,但是调用bizdata.save()就只会打印KSQL。KSQL如上,参数值都是:xxx,没有具体值的。
回复 支持 反对

使用道具 举报

51

主题

268

帖子

496

积分

中级会员

Rank: 3Rank: 3

积分
496
QQ
 楼主| 发表于 2014-5-6 09:23:22 | 显示全部楼层
undar 发表于 2014-5-5 23:43
你先写一个固定的sql执行一下,直接去yRowID试试。

insert into ba_storagedetailacct(yRowID,gProcessCode) values ('a','b') 这样后台执行是正常的
回复 支持 反对

使用道具 举报

51

主题

268

帖子

496

积分

中级会员

Rank: 3Rank: 3

积分
496
QQ
 楼主| 发表于 2014-5-6 09:24:02 | 显示全部楼层
yinlun 发表于 2014-5-6 07:54
楼主你写的这个 WHERE 1=2,就是说返回的表是没有数据的;如果返回有数据的table测试下呢? ...

还是不行哦
回复 支持 反对

使用道具 举报

45

主题

4492

帖子

3960

积分

论坛元老

Rank: 8Rank: 8

积分
3960
QQ
发表于 2014-5-6 09:24:14 | 显示全部楼层
xuni2 发表于 2014-5-6 09:20
打印KSQL和SQL已经配置过了。平时都能打印出来,但是调用bizdata.save()就只会打印KSQL。KSQL如上,参数 ...

KSQL 的执行最终还是转化为SQL来执行,
你对平台进行配置,
在TOMCAT中有输也KSQL与SQL,然后看一下SQL是不正常。
向前进,向前进,我们……
回复 支持 反对

使用道具 举报

51

主题

268

帖子

496

积分

中级会员

Rank: 3Rank: 3

积分
496
QQ
 楼主| 发表于 2014-5-6 09:43:23 | 显示全部楼层
本帖最后由 xuni2 于 2014-5-6 09:46 编辑
fpj 发表于 2014-5-6 09:24
KSQL 的执行最终还是转化为SQL来执行,
你对平台进行配置,
在TOMCAT中有输也KSQL与SQL,然后看一下SQL是 ...

我是用开发版的,直接studio启动tomcat。控制台打印的,跟单独外面启动tomcat打印的日志应该是一样的吧。我已经在窗口-首选项-运行时配置,,里面配置过了。还要单独去t \runtime\BusinessServer\WEB-INF\justep.log.properties配置吗,配置了,也还是不打印SQL。
回复 支持 反对

使用道具 举报

45

主题

4492

帖子

3960

积分

论坛元老

Rank: 8Rank: 8

积分
3960
QQ
发表于 2014-5-6 09:48:11 | 显示全部楼层
xuni2 发表于 2014-5-6 09:43
我是用开发版的,直接studio启动tomcat。控制台打印的,跟单独外面启动tomcat打印的日志应该是一样的吧。 ...

以前版本
配置文件\runtime\BusinessServer\WEB-INF\justep.log.properties
把其中的#log4j.logger.com.justep.system.ksql=DEBUG,CONSOLE
改为
log4j.logger.com.justep.system.ksql=DEBUG,CONSOLE
加#默认是注释掉的,然后重启服务


X5.2.6版本开始,
可以在studio首选项中开启日志输出执行的KSQL和SQL语句以及执行的时间,时间选项的单位是毫秒,可以设置0,然后点应用、确定,最后重启tomcat


然后就可以输出SQL了

评分

参与人数 1 +4 收起 理由
jishuang + 4 赞一个!

查看全部评分

向前进,向前进,我们……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 11:16 , Processed in 0.075958 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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