2016-12-02 13:33
@静静滴疯 方言是对应于某个 ActiveRecordPlugin,而 dataSource 也是对应于某个 ActiveRecordPlugin,对应关系需要使用 configName 来做,在创建 ActiveRecordPlugin 时需要为其指定一个 configName
2016-12-02 12:47
@静静滴疯 截图中的字符是 "`" 而不是 "'" ,注意看一下,终级解决方案是单步调试程序,看一下 batchSave() 方法内部用的 Config 对象中的 dialect 到底是什么类型,一目了然
2016-12-02 12:26
@静静滴疯 看了一下异常,很明显你是将 postgresql 的方言设置成了 mysql 方言
2016-12-02 10:43
注意看一下这个方法上的 API 文档:
Batch save records using the "insert into ..." sql generated by the first record in recordList. Ensure all the record can use the same sql as the first record.
这个方法用于批量 save 记录,所使用的 sql 是依赖于你的第一个 record 对象来的,而不需要手工提供 insertSql,第一个参数由 insertSql 改为 tableName 即可:
Db.use("post").batchSave("tb_jan_mst", list, num);
2016-12-01 18:15
这件事情的学名叫:mass assignment,是任何框架都存在的事情,即便你用Spring、struts开发,或者用 ruby 语言的 rails框架开发也一样要处理这件事,开发者自己需要处理好,因为web 框架处于后端,在框架层面无法预测你前端页面传过来的哪些字段是需要的,这种“哪些字段是需要的”逻辑属于业务层面的事情
jfinal 在很早期的版本就已提供了极简支持:
1:model.keep(...) 可以在 getModel 以后,指定只保留几个属性,可以一次指定多个,如:model.keep("title", "content")
2:model.remove(...) 也可以移除指定的属性
对于这个问题的探讨,几年前就有了:http://www.oschina.net/question/260040_46570
2016-12-01 17:23
jfinal 在所有操作数据库的地方都用了 finally { conn.close(); } 确保连接被关闭,所以只要是直接使用 jfinal API 操作数据库,都确保了连接关闭
连接可能未被关闭的情况是开发者自行获取 Connection 的情况,例如:
DbKit.getConfig().getConnection() 或者
DbKit.getConfig().getDataSource().getConnection()
上述两类代码,开发者需要自行处理 connection 的关闭,建议一定要在 finally 块之中去关闭
至于贴子中出现的问题,除了上述用户自行去拿 connection 没关的情况,还有一种情况是连接获取的速度快于连接回收的速度,造成连接很快被耗尽的情况,调整下连接池大小,以及程序即可