使用模板拼接SQL中文引号的问题

  1. insert into game_data
  2. (game_id, team_id, user_id, score, assists, yellow_card, red_card, extra)
  3.   values
  4.     #for(x : data)
  5.       #(for.index == 0 ? "" : ",")
  6.       (#(x.game_id), #(x.team_id), #(x.user_id), #(x.score), #(x.assists), #(x.yellow_card), #(x.red_card), #(x.extra ?? "null"))
  7.     #end
  8.   on duplicate key
  9.       update score = values(score), assists = values(assists), yellow_card = values(yellow_card),
  10.       red_card = values(red_card), extra = values(extra)



执行之后的SQL

  1.  insert into game_data
  2. (game_id, team_id, user_id, score, assists, yellow_card, red_card, extra)
  3.   values
  4.       
  5.       (3, 34, 27, 3, 1, 0, 0, 测试)
  6.       ,
  7.       (3, 34, 17, 1, 2, 0, 0, null)
  8.   on duplicate key
  9.       update score = values(score), assists = values(assists), yellow_card = values(yellow_card),
  10.       red_card = values(red_card), extra = values(extra)


问题:使用模板中的for时,当有中文如何添加双引号。

评论区

JFinal

2017-09-06 13:09

将 #(...) 改为 #para(...) 的用法即可,前者仅仅是将参数直接输出为 sql 内容本身,后者仅仅是生成一个 '?" 问号占位,而参数生成在了另一个 paraList 之中

jfinal 的 sql 管理本质上就做了一件事情:利用模板引擎生成 sql 语句,并将问号占位的参数统一放入一个 list,sql 与 参数被封装在了 SqlPara 对象之中

SqlPara 中存放的 sql + paras,转交给 JDBC 执行就完事了

JFinal

2017-09-06 13:11

很重要一点: jfinal 的 sql 管理功能,并没有发明任何超出 sql + para 的事情,只要大家保障了最终生成的 SqlPara 中的sql + para 是能被 JDBC 所执行,sql 管理功能的事情就完成了

Javen

2017-09-07 21:11

已解决 感谢波总耐心解答

热门反馈

扫码入社