大侠们,求教个问题,关于DbPro的update方法执行insert into 返回成功有时数据库里却没有数据

今天特别奇怪,之前从来都没出现过这个问题,今天在一张新表(4个varchar的字段)执行时,时不时(差不多每4次就会出现1次的概率)就会出现,返回成功但是数据库里面没有记录的情况,再debug的情况下每次又是正常的。最后采用jdbc的方式就没出现这情况了。sql也是很正经的sql【insert into a(***) value(***)】

blob.png

blob.png

如TEST111就没进库

请教下可能是什么原因造成的呢? 如果需要什么线索 可留言 谢谢

blob.png

评论区

JFinal

2018-03-23 19:30

先看下日志里面的异常,如果没有异常就配置好 log4j

异常信心是解决问题的关键,靠猜是不行的

JFinaler1

2018-03-23 19:35

@JFinal 好的 感谢 我先去配置下log4j

JFinaler1

2018-03-23 21:16

@JFinal sql 返回值等一切正常输出 没任何异常等输出
建议在什么地方增加日志输出还追踪呢

JFinaler1

2018-03-23 21:17

@JFinal 把输出的sql 直接拿出来跑 也能正常保存到数据库

JFinaler1

2018-03-23 21:34

@JFinal 麻烦有空的时候看 最后一张图

JFinal

2018-03-23 23:49

@JFinaler1 sql 中不要拼接参数,参数改成问号占位:
String sql = "insert into xxx(a, b) values ( ?, ?)";
Db.update(sql, p1, p2);

查询的时候也类似:
Db.find("select * from xxx where a=?", a);

JFinaler1

2018-03-24 11:14

@JFinal 感谢指点,最后一张图我想表达的是 insert into 返回了成功执行1条数据 然后我查询这条数据却查不到,数据库也没记录

JFinaler1

2018-03-24 11:17

@JFinal 有时还会出现 insert into 返回1 然后 select 也查询出了记录 但是 数据库里面没记录的情况... 真的很奇怪 其他地方都没出现过

JFinal

2018-03-24 13:39

@JFinaler1 升级下数据库驱动,以及 druid 版本,看是不是这些第三方有 bug

jfinal 所有数据库操作都是将你的 sql + paras 直接扔给了 JDBC API 去处理,未做过任何干预,所以 jfinal 层面出错的可能性几乎不存在

JFinaler1

2018-03-24 14:20

@JFinal 好的 十分感谢 把表的引擎由InnoDB换成MyISAM后就正常了 具体为什么也不太清楚... 继续探索ing

JFinal

2018-03-24 14:27

@JFinaler1 是不是开启事务了? InnoDB 支持事务而 MyISAM 不支持事务。

开启事务以后,如果后一条 sql 依赖于前一条 sql,那是会有影响的,因为事务提交以后第一条 sql 才真正被持久化

如果开启了事务,关闭一下再试试,建议用 InnoDB

JFinaler1

2018-03-25 12:35

@JFinal 非常感谢 昨天切换回InnoDB后 反复测试了下 [疑似]真是 公司的连接池造成的 换成那个jfinal_demo版本的druid后 测试了100条数据都已正常

热门反馈

扫码入社