开发者社区> 问答> 正文

表名替换异常

使用Oracle数据库,在使用SQLUtils.toSQLString(statementList, dbType, parameters, option, tableMapping)这个API时出现问题。

部分代码如下:

Map<String, String> tableMapping = new HashMap<String, String>(); tableMapping.put(historyDataRoute.getOriginalTableName(), historyDataRoute.getHisTable()); List stmtList = SQLUtils.parseStatements(sql, JdbcConstants.ORACLE); String refactorSql = SQLUtils.toSQLString(stmtList, JdbcConstants.ORACLE, null, new FormatOption(true, false), tableMapping);

代码中sql为简单的update语句,例如“UPDATE FUNDIN SET BANKTIME = ?, SENDTIME = ? WHERE TXNO = ?” 主要问题:上述代码在并发量小的时候不会出现问题,并发量大的时候会出现个别表名无法替换的情况,现在发现的情况都是Update语句。

原提问者GitHub用户workTestdr

展开
收起
山海行 2023-07-05 19:59:28 64 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    SQLUtils.toSQLString() 是阿里巴巴的开源 SQL 解析工具,用于将 SQL 语句转换成字符串。根据您的描述,您在使用 SQLUtils.toSQLString(statementList, dbType, parameters, option, tableMapping) 方法时遇到了问题。以下是一些可能的原因和解决方案:

    数据库类型不兼容:SQLUtils.toSQLString() 方法需要指定正确的数据库类型,以便正确地解析 SQL 语句。如果您指定的数据库类型不正确或不兼容,可能会导致解析错误。请确保您指定的数据库类型与实际使用的数据库类型相匹配。

    SQL 语法错误:如果您的 SQL 语句中存在语法错误,SQLUtils.toSQLString() 方法可能会解析失败。请检查您的 SQL 语句,确保它们符合该数据库的语法规则。

    参数错误:SQLUtils.toSQLString() 方法需要传入正确的参数,以便正确地解析 SQL 语句。如果您传入的参数不正确,可能会导致解析错误。请确保您传入的参数正确并且符合该方法的要求。

    版本兼容性问题:SQLUtils.toSQLString() 方法的版本与您正在使用的数据库版本不兼容,可能会导致解析错误。请检查您使用的 SQLUtils 版本是否与您的数据库版本兼容。

    2023-07-30 14:36:26
    赞同 展开评论 打赏
  • 可能是由于使用了占位符(?)来代替实际的值,导致了在某些情况下无法替换表名。在Oracle数据库中,使用占位符来代替实际的值是不被支持的,因此可能会出现问题。

    2023-07-11 10:02:25
    赞同 展开评论 打赏
  • 传入一个ConcurrentHashMap试试

    原回答者GitHub用户wenshao

    2023-07-06 11:16:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载