NutzCN Logo
问答 nutz 用params().set(key,value)赋值
发布于 3119天前 作者 qq_21c92e9a 1913 次浏览 复制 上一个帖子 下一个帖子
标签:

在使用params().set(key,value)赋值的时候,偶尔会出现赋值不成功情况,出现的概率不高。但是跟踪不到原因,跟踪到set()方法的底层,可以获取到值,执行sql抛错。使用nutz一年半了,出现过两次这种情况,每次都折腾好久,之前一次是在本机出现,这次直接在内网环境暴露出来,过段时间莫名其妙的就好了。这种情况有点危险,如果在正式环境出现,那就是灾难了。所以请教下此问题有解没

6 回复

除非你能重现出来,否则先别怀疑是框架的问题

不好意思,我没怀疑框架问题,就是问下有遇到过这种情况没有,毕竟不是频繁出现。出现概率很低

@qq_21c92e9a 第一次听说,因为就是个map,丢掉值这种情况基本上不会,除非jdk的bug

遇到这种,最好结合当时的数据,看看哪里有特殊的情况了

具体的版本号多少

1.50版本
360桌面截图20160608201856_jpg
360桌面截图20160608201950_jpg
360桌面截图20160608202008_jpg
360桌面截图20160608202030_jpg

我的代码
Sql sql = roomDao.sqls().create("room.roomInfoList.broadLive");
sql.params().set("type", type);
sql.setCallback(Sqls.callback.maps());
roomDao.execute(sql);
return sql.getList(BrocastModel.class);

    源代码:

public void addBatch() {
lastRow = new SimpleVarSet();
rows.add(lastRow);
}

public void clearBatch() {
    rows.clear();
    addBatch();
}

public Sql setCallback(SqlCallback callback) {
    this.callback = callback;
    return this;
}

经过多次跟踪发现,出现赋值失败的时候,rows为空,没有找到什么时候rows清空的。在sql.params().set("type", type);时候是可以成功的,但是在sql.setCallback(Sqls.callback.maps());进入
public Sql setCallback(SqlCallback callback) {
this.callback = callback;
return this;
}
方法是,rows已经被清空

toString截断,是显示的bug, 新版已经fix, 不影响执行的, toSQL能得到正确的

我猜是type带空格或不可见字符,导致匹配不上.

sql.params().set("type", type);

1.type是int类型,而且值很简单,手动输入,不可能是空格或者不可见字符
2.并不是每次都会出现这种情况,多跑几次,会成功。我传入的值并未改变
3.猜想过有可能是打断点影响了执行,但是证实不是这个原因
4.这个rows是LinkedList(),有没有可能是java虚拟机自动回收了一个空的LinkedList,只是猜想,并未得到证实。这种可能性很低,因为rows的引用一直在持续。还得在试试

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