mybatis使用postgresql函数报错 Encountered unexpected token: “[\‘23\‘]“ <S_QUOTED_IDENTIFIER>

需求:

数据库:postgresql;

数据库表中该字段存的值为 1,2,3;

要求入参为2 ;能查到该字段值有2的数据;

查询到 有一个函数满足需求:string_to_array

sql写法如下:

sql在图形化界面运行是没有问题的,但是放到mybatis里,就提示错误;

图形化界面运行结果:

-------------------------------------------------------分割线----------------------------------------------------------------

下面是报错信息:

### The error occurred while executing a query
### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId.
 Error SQL: SELECT
			attachmentid,
			filepath AS filename
		FROM
			T_Attachment_File
		WHERE
			type = ?
			and string_to_array( revise_history_id, ',')   @>   array   ['23']
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at sun.reflect.GeneratedMethodAccessor174.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
	... 128 common frames omitted
Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId.
 Error SQL: SELECT
			attachmentid,
			filepath AS filename
		FROM
			T_Attachment_File
		WHERE
			type = ?
			and string_to_array( revise_history_id, ',')   @>   array   ['23']
	at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:39)
	at com.baomidou.mybatisplus.core.parser.AbstractJsqlParser.parser(AbstractJsqlParser.java:74)
	at com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler.sqlParser(AbstractSqlParserHandler.java:66)
	at com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor.intercept(PaginationInterceptor.java:127)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
	at com.sun.proxy.$Proxy293.prepare(Unknown Source)
	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:136)
	at sun.reflect.GeneratedMethodAccessor175.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
	at com.sun.proxy.$Proxy292.query(Unknown Source)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
	... 133 common frames omitted
Caused by: net.sf.jsqlparser.JSQLParserException: null
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:154)
	at com.baomidou.mybatisplus.core.parser.AbstractJsqlParser.parser(AbstractJsqlParser.java:60)
	... 148 common frames omitted
Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "[\'23\']" <S_QUOTED_IDENTIFIER>
    at line 8, column 64.

Was expecting one of:

    "&"
    "&&"
    "("
    "::"
    ";"
    "<<"
    ">>"
    "AND"
    "CONNECT"
    "EXCEPT"
    "FOR"
    "GROUP"
    "HAVING"
    "INTERSECT"
    "MINUS"
    "ORDER"
    "START"
    "UNION"
    "^"
    "|"
    <EOF>

	at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:19398)
	at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:19248)
	at net.sf.jsqlparser.parser.CCJSqlParser.Statements(CCJSqlParser.java:547)
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:152)
	... 149 common frames omitted

尝试解决方法:

1、一开始使用#号取参数,同样的报错信息;

and string_to_array( revise_history_id, ',') <![CDATA[ @> ]]> array <![CDATA[ [#{reviseHistoryId}] ]]>

2、使用$取参,相同错误;

and string_to_array( revise_history_id, ',') <![CDATA[ @> ]]> array <![CDATA[ [${reviseHistoryId}] ]]>

3、添加了单引号,里面继续使用$取参数,同样报错;

and string_to_array( revise_history_id, ',') <![CDATA[ @> ]]> array <![CDATA[ ['${reviseHistoryId}'] ]]>

单引号,双引号,#,$,都尝试过了;均无效;

-----------------------------------------------------------------------------

问题分析:

可能是由于xml里的写法问题,中括号的实现不符合要求;

---------------------------------

最终解决方案:

其实很简单,xml中可能不支持中括号的写法;

所以:

and string_to_array(revise_history_id, ',') <![CDATA[  @> ]]> string_to_array(#{reviseHistoryId}, ',')

这样就可以了,就是这么简单;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值