当前位置: 首页 > news >正文

Jfinal+SQLite处理 sqlite数据库执行FIND_IN_SET报错

方法一

原代码

sql +=" and FIND_IN_SET(s.M_ID,'" + ids + "')";
修改为 sql += " where s.M_ID"+getInSql(ids);
public static String getInSql(String ids) {String[] idArray = ids.split(",");StringBuilder sql = new StringBuilder(" IN (");for (int i = 0; i < idArray.length; i++) {// 直接将参数值添加到 SQL 片段中sql.append("'").append(idArray[i].trim()).append("'");if (i < idArray.length - 1) {sql.append(",");}}sql.append(")");return sql.toString();
}

缺点,FIND_IN_SET量大,需要改动多 

方案二观察到Jfinal所有需要执行的sql语句会经过Sqlite3Dialect,我们在Sqlite3Dialect类中重写sql语句,判断是sqlite数据库,且是否含FIND_IN_SET,继而进行修改替换FIND_IN_SET

@Override
public List<Record> dbFindForRecord(String sql, Object... paras) {/*System.out.println(sql);List<Record> list = Db.find(sql,paras);return list;*/String jdbcUrl = null;try {jdbcUrl = DbKit.getConfig().getDataSource().getConnection().getMetaData().getURL();} catch (SQLException e) {e.printStackTrace();}System.out.println("改动之前sql"+sql);if (jdbcUrl != null && jdbcUrl.contains("sqlite") && sql.contains("FIND_IN_SET")) {// 正则:FIND_IN_SET(\w+,\?(\d+)?\))  ->  INSTR(','||$2||',' , ','||$1||',')>0sql = sql.replaceAll("(?i)FIND_IN_SET\\s*\\(\\s*(\\w+)\\s*,\\s*\\?\\s*\\)","INSTR(','||?||',' , ','||$1||',')>0");}System.out.println("改动之后sql"+sql);return Db.find(sql, paras);},其他调用可按如上例子修改,看自己需求
http://www.dtcms.com/a/285881.html

相关文章:

  • .NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!
  • 从复合变量到分组分析:piecewiseSEM 解析生态系统多因子交互作用
  • 深度剖析:最新发布的ChatGPT Agent 技术架构与应用场景
  • 专题:2025智能体研究报告|附70份报告PDF、原数据表汇总下载
  • NJU 凸优化导论(8) Lagrange Dual 拉格朗日对偶
  • Kotlin集合分组
  • 解决selenium元素定位不到疑难杂症
  • TCL 电视安装 APK 文件主要有 U 盘安装——仙盟创梦IDE
  • nastools继任者?极空间部署影视自动化订阅系统『MediaMaster』
  • echarts dataZoom 文本显示不完整
  • 响应式编程入门教程第六节:进阶?Combine、Merge、SelectMany 与错误处理
  • 【怜渠客】简单实现手机云控Windows电脑锁屏
  • MySQL中的锁有哪些
  • 【软件重构】如何避免意外冗余
  • 一文入门深度学习(以医学图像分割为例)
  • 【机器学习深度学习】LoRA 与 QLoRA:大模型高效微调的进阶指南
  • 【华为机试】70. 爬楼梯
  • 快速安装GitLab指南
  • mix-blend-mode的了解使用
  • git 介绍与使用教程
  • LP-MSPM0G3507学习--05管脚中断
  • 如何 ASP.NET Core 中使用 WebSocket
  • HTTP性能优化实战技术文章大纲
  • final 使用
  • 实现库存显示和状态按钮的Question
  • 数据统计模块后端架构解析:从Controller到SQL的ECharts数据对接实践
  • Spring介绍以及IOC和AOP的实现
  • 某邮生活旋转验证码逆向
  • Ansible + Shell 服务器巡检脚本
  • 如何使用Python将HTML格式的文本转换为Markdown格式?