2020-05-29 14:44

jfinal 的 active record 模块的 sql 管理功能极度强大、方便,一定要用上

这个功能可以在外部文件中管理 sql , 也可以在 java 代码中写 sql 模板来使用,通过 Db.templateByString(...) 就可以用上了

文档中非常详细:
https://jfinal.com/doc/5-13

2020-05-29 14:43

你的 sql 中只有一个问号,但你传入了两个参数,所以是错误的,改成下面这样:
Db.update("UPDATE CSAlogin SET RmbPoint=RmbPoint + price WHERE mobile=?", mobile);

如果你要添加的这个 price 并不是数据库中字段的值,改成下面这样来做:
String sql = "UPDATE CSAlogin SET RmbPoint = RmbPoint + #(price) WHERE mobile= #para(mobile)";

Kv kv = Kv.by("price", 这里填入你希望的值).set("mobile", mobile);
Db.templateByString(sql, kv).update();

2020-05-29 14:38

回到你的碰到的问题本身,我建议你远程调试一下:
https://jfinal.com/feedback/5106
https://jfinal.com/share/1528

2020-05-29 14:36

@tyroxyz 直接拼 sql 是极度危险的,有被 sql 注入的风险,像下面这样使用:
String sql = "UPDATE #(table) SET duration_min = #para(durationMin) ,update_time=#para(updateTime) ... #if ( 0 < status) #para(status) #end ";

Kv kv = Kv.by("table", 表名).set("durationMin", durationMin).....;
updateRet = Dao.templateByString(sql, kv).update();

也就是说,在 java 代码中可以使用 String 变量的形式来使用 sql 模板,极度方便

2020-05-29 11:43

jfinal 本身的行为并不是这样的,估计你们改过代码,或者 sql 写得不对

建议单步调试跟踪一下,看是哪个环境出现的问题

2020-05-29 11:41

@天晴 具体可以看一下 JFinal 的 ActionHandler 从 116 行代码开始的地方

2020-05-29 11:40

@天晴 配置好 log4j.properties,有异常不要自己在 catch 中吃掉即可被 jfinal 做日志

2020-05-28 21:31

@himans 这个 sameSite 属性是不是一个独立的 cookie ?

还是说这是在原有 cookie 上附加的另一个值?

前者就是这样用的:
setCookie("sameSite", ...)

后者是这样用的:
setCookie("myCookie", "myValue; saveSite=...");

2020-05-28 20:34

@laofa 这个就在 jfinal 领域之外了,有些轮子还是不要重复去造为好,节省资源

2020-05-28 18:20

使用如下代码:
Engine engine = RenderManager.me().getEngine();
Template template = engine.getTemplate(...);

// file 可以指向任意地方,可以使用绝对路径
String file = "/var/html/file-name.html";
template.render(..., file);

输出到任意目录下的任意文件, 极度方便

2020-05-28 17:10

@wtsoftware 正要推出的商城频道会出各种各样的插件

2020-05-28 16:42

@王先森 可能是数据量大,一直在执行

你可以在每次插入一批数据以后,向控制台输出提示信息,以免误判

也可以在每插入一个分页数据以后做日志

一定要想办法找到症状。 当前情况并没有抛异常,最直观的看法是程序仍然在执行,由于数据太多,外在表象是卡住了

2020-05-28 16:18

@fred 其实用 setCompressorOn('\n') 就足够好了,既保障了压缩率,又保障了压缩性能,还保障了压缩结果的可读性

2020-05-28 16:03

如果不抛出的话,自己用 log.error(...) 做日志也是可以的