开发者社区> 问答> 正文

postgresql 语法不支持

druid + mybatis + spring druid版本 1.0.31

插入语句中带有 #{time}::timestamp without time zone,

报异常: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'tamp without time zone, ',expect RPAREN, actual IDENTIFIER without

实际数据插入成功

原提问者GitHub用户NeedCuriosity

展开
收起
山海行 2023-07-05 20:56:21 121 0
4 条回答
写回答
取消 提交回答
  • 根据你提供的信息,Druid SQL 解析器可能无法正确解析 PostgreSQL 插入语句中的 #{time}::timestamp without time zone 这样的语法。这可能导致报错。

    为了解决这个问题,可以尝试以下方法:

    1. 确保你使用的是 Druid 的最新版本。在最新版本中,可能已经修复了该问题。

    2. 将插入语句中的 #{time}::timestamp without time zone 修改为 CAST(#{time} AS timestamp)。这样可以将参数值转换为 timestamp 类型后再传入,避免 Druid SQL 解析器无法解析参数类型的问题。

    3. 如果你使用的是 MyBatis 3.4.0 及以上版本,可以在 mybatis-config.xml 文件中配置 jdbcTypeForNull 属性为 NULL。这样 MyBatis 会将 null 值转换为 SQL 中的 NULL,从而避免 Druid SQL 解析器无法解析参数类型的问题。

    如果以上方法仍然不能解决问题,建议查阅 Druid 的官方文档或咨询相关技术支持,以获取进一步帮助。

    2023-07-30 14:36:25
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    根据你提供的信息,可能是由于 Druid SQL 解析器无法正确解析 ::timestamp without time zone 的语法导致的异常。

    在 PostgreSQL 中,::timestamp without time zone 是用于将字符串转换为 timestamp 类型的语法。但是,Druid SQL 解析器可能无法正确解析该语法,导致报错。

    为了解决这个问题,你可以将插入语句中的 #{time} 参数值转换为 timestamp 类型后再传入。
    如果你使用的是 MyBatis 3.4.0 及以上版本,你可以在 mybatis-config.xml 文件中配置 jdbcTypeForNull 属性为 NULL,这样 MyBatis 会将 null 值转换为 SQL 中的 NULL,从而避免 Druid SQL 解析器无法解析参数类型的问题。

    2023-07-30 13:06:09
    赞同 展开评论 打赏
  • 如果你在插入语句中使用了#{time}::timestamp without time zone,但是Druid连接池报错,可能是因为Druid连接池无法解析该语句。具体来说,Druid连接池可能无法解析#{time}::timestamp without time zone这个语法,因为它不是一个标准的时间戳类型参数语法。

    2023-07-11 10:30:28
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

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

相关电子书

更多
金融级 PostgreSQL监控及优化 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载