向 NativeQuery 添加多个参数时出现无效字符异常

Invalid character Exception when adding multiple parameters to NativeQuery

我使用 JDBC 并想创建一个带有两个参数的 NativeQuery,其中一个是 String,另一个是 int。当我尝试这样做时:

import javax.persistence.EntityManager;
...
private final EntityManager entityManager;
....
String columnName = "exampleName";
int columnNumber = 5;
entityManager.createNativeQuery("SELECT c.TABLE_NAME, c.TCL_NUMBER from COL_NAME c where c.TABLE_NAME " +
                    "like ?1 and c.TCL_NUMBER like ?2;")
                .setParameter(1, columnName)
                .setParameter(2, columnNumber)
                .getSingleResult();

我得到一个 java.sql.SQLSyntaxErrorException: ORA-00911: invalid character 异常。 这是我的 SQL:

CREATE TABLE COL_NAME (
  TABLE_NAME               VARCHAR2(50 BYTE),
  TABLE_NUMBER             NUMBER(10,0)
);

当我想设置一个 int 作为参数时,我是否必须考虑一些特殊的事情?

您已经发现查询中的问题来自 ?1?2。这将被编译成类似的东西:

SELECT c.TABLE_NAME, c.TCL_NUMBER from COL_NAME c where c.TABLE_NAME like 'val1'1 and c.TCL_NUMBER like 'val2'2 

这显然是不正确的 sql 语法。

所以正确的代码是:

entityManager.createNativeQuery("SELECT c.TABLE_NAME, c.TCL_NUMBER from COL_NAME c where c.TABLE_NAME " +
                "like ? and c.TCL_NUMBER = ? ")
            .setParameter(1, columnName)
            .setParameter(2, columnNumber)
            .getSingleResult();