当前位置: 首页 > 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.lryc.cn/news/592439.html

相关文章:

  • docker--Dockerfile
  • LP-MSPM0G3507学习--04GPIO控制
  • docker--程序自启动
  • 融合优势:SIP 广播对讲联动华为会议 全场景沟通响应提速​
  • http与https的主要区别是什么?
  • openpyxl 流式读取xlsx文件(read_only=true)读不到sheet页中所有行
  • Git语义化提交规范及提交模板设置
  • sqli-labs靶场通关笔记:第27-28a关 union、select过滤
  • 网络安全:使用.NET 检测网络下载文件及其来源
  • pdf格式怎么提取其中一部分张页?
  • 文档处理控件TX Text Control系列教程:使用 C# .NET 将二维码添加到 PDF 文档
  • 从Hyperliquid到AILiquid:一场从极致性能到策略智能的迭代
  • Excel基础:格式化
  • HTTP性能优化实战技术文章大纲
  • LeafletJS 性能优化:处理大数据量地图
  • 深入理解 Redis 集群化看门狗机制:原理、实践与风险
  • 一文讲清楚React性能优化
  • 2025年华为认证之HCIE-云计算方向的报考流程
  • 指定阿里镜像原理
  • Stateflow Chart平替State Transition Table
  • MySQL的基本操作及相关python代码
  • 动态规划 + DFS + 记忆化!Swift 解 LeetCode 329 的实战笔记
  • 期刊论文-图片格式要求
  • 电脑视频常用几种接口
  • 深度学习入门-深度学习简介
  • 五大平台,构建AI创新转化的“同济方案”
  • 密码学基础概念详解:从古典加密到现代密码体系
  • 快速了解pycharm
  • 拓扑排序/
  • Hinge Loss(铰链损失函数)详解:SVM 中的关键损失函数