【问题标题】:MyBatis ORA-01745: invalid host/bind variable nameMyBatis ORA-01745: 无效的主机/绑定变量名
【发布时间】:2015-11-11 22:55:06
【问题描述】:

我在 MyBatis 中有一个插入语句,在后端使用 Oracle 11g R2 和 Oracle ojdbc6 驱动程序。

我反复得到

java.sql.SQLSyntaxErrorException: ORA-01745: invalid host/bind variable name

但是我看不出是什么导致了问题,我没有使用任何 Oracle 保留关键字。

<insert id="createRecord" parameterType="org.appliication.core.domain.TRRecord"
            statementType="PREPARED" useGeneratedKeys="true" keyColumn="ID" keyProperty="id">

        INSERT INTO T_TR_PUBLICATION p (
          p.TR_UID,
          p.TITLE,
          p.ITEM_TITLE,
          p.COVER_DATE,
          p.HAS_ABSTRACT,
          p.ISSUE,
          p.SORT_DATE,
          p.VOLUME,
          p.BEGIN_PAGE,
          p.END_PAGE,
          p.ACCESSION_NO,
          p.ISSN,
          p.DOI,
          p.FUNDING_TEXT
        )
        VALUES (
          #{trUid, jdbcType=NULL},
          #{title, jdbcType=NULL},
          #{titleItem, jdbcType=NULL},
          #{coverDate, jdbcType=NULL},
          #{hasAbstract, jdbcType=NULL},
          #{issue, jdbcType=NULL},
          #{sortDate, jdbcType=NULL}
          #{journalVolume, jdbcType=NULL},
          #{pageBegin, jdbcType=NULL},
          #{pageEnd, jdbcType=NULL},
          #{accessionNo, jdbcType=NULL},
          #{issn, jdbcType=NULL},
          #{doi, jdbcType=NULL},
          #{fundingText, jdbcType=NULL}
        )

    </insert>

【问题讨论】:

  • 不知道 MyBatis,但尝试删除 jdbcType=NULL,因为 NULL 不是用于此目的的有效 JDBC 类型。您不能将值绑定到 NULL 类型。
  • 这个org.appliication.core.domain.TRRecord 包/类路径是否正确?
  • @Andreas,如果没有 jdbcType=NULL,MyBatis 将无法工作,因为如果像 String 这样的对象为空,它会映射到 Oracle JDBC 驱动程序无法理解的 JdbcType.OTHER,因此它会抛出异常:UncategorizedSQLException:使用 JdbcType OTHER 为参数 #8 设置 null 时出错。尝试为此参数设置不同的 JdbcType 或不同的 jdbcTypeForNull 配置属性。原因:java.sql.SQLException:无效的列类型
  • @Mastah,我已经确认路径是正确的,实际上我的 IDE 会自动完成路径
  • @greyfox 然后指定您想要的实际类型,例如VARCHAR。这样,值(“abc”)和 null 都将映射到 JDBC 驱动程序可以理解的类型。但是,我原以为 MyBatis 会检查 TRRecord 中的字段类型以自动选择正确的类型。

标签: java oracle mybatis spring-mybatis


【解决方案1】:

指定您想要的实际类型,例如VARCHAR。这样,值 ("abc") 和 null 都将映射到 JDBC 驱动程序可以理解的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多