@JFinal 波哥你好,我有个小小的建议,希望能考虑一下,是关于 Db类中的批处理batch操作的。
从我个人而言,我使用最多就是读取文件的中的数据,进行批量入库 (oracle数据库),其中有个问题就是当我们更新或删除不存在的数据时,数据库并不会报错,但是为了保证数据能够尽可能的入库,我就必须要知道当前批量操作到底成功了多少条,把未能成功update的数据,再次进行insert操作。而根据jfinal的 Db 类 对batch的封装,原汁原味的返回了一个int类型的数组,但是我个人觉得这个数组中的数据并无多大意义,特别地,不能统计出当前批处理操作到底成功了多少条,而通过PreparedStatement 对象的 getUpdateCount()方法却能获得每次批量提交时对数据库真实的影响条数(即 成功了多少条)。
So I have a dream ,我希望JFinal的Db类能够通过某种途径,返回批量操作对数据库的真实影响条数.
我会好好思考这个问题,看是否能把此功能在下一版本实现,或许传个int[] updateCount参数进去就可以
######测试了一下PreparedStatement 对象的 getUpdateCount()方法只能得到最后一条sql的更新数量,所以当addBatch(...)超过一条时getUpdateCount()得到的数据没有意义了。
要得到更新总数需要对目前int[] 返回值做个累加。所以目前能想到的解决方案:
1:改变返回值,将 int[] 进行累加并返回 long
2:添加 long[] updateCount形参,将累加值存入此变量
如果采用方案一,那么开发者万一要去拿int[]就不方便了。或许可以采用方案二,但如果保持现状,开发者可以通过一个简单的循环达到此目的:
int[] result = Db.batch(...); long updateCounter = 0; for (int i : result) updateCount += i;
是否要要用添加 long[] updateCounter需要再权衡一下,主要为是考虑简洁 :)
######测试了一下PreparedStatement 对象的 getUpdateCount()方法只能得到最后一条sql的更新数量,所以当addBatch(...)超过一条时getUpdateCount()得到的数据没有意义了。
要得到更新总数需要对目前int[] 返回值做个累加。所以目前能想到的解决方案:
1:改变返回值,将 int[] 进行累加并返回 long
2:添加 long[] updateCount形参,将累加值存入此变量
如果采用方案一,那么开发者万一要去拿int[]就不方便了。或许可以采用方案二,但如果保持现状,开发者可以通过一个简单的循环达到此目的:
int[] result = Db.batch(...); long updateCounter = 0; for (int i : result) updateCount += i;
是否要要用添加 long[] updateCounter需要再权衡一下,主要为是考虑简洁 :)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。