Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 向NativeQuery添加多个参数时出现无效字符异常_Sql_Jdbc - Fatal编程技术网

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

Sql 向NativeQuery添加多个参数时出现无效字符异常,sql,jdbc,Sql,Jdbc,我使用JDBC,希望创建一个带有两个参数的NativeQuery,其中一个是String,另一个是int。当我尝试这样做时: import javax.persistence.EntityManager; ... private final EntityManager entityManager; .... String columnName = "exampleName"; int columnNumber = 5; entityManager.createNativeQuery("SELEC

我使用
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:无效字符
异常。 这是我的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();

AFAIK不支持对数字使用like子句。数字不是字符串。哦,这很有意义。我明天会检查这是否是唯一的问题,但我想是的。如果你喜欢,你可以把你的评论作为答案,我会接受的。谢谢此外,不能使用索引(
?1
?2
等)附加绑定变量。您需要对所有变量使用一个简单的问号(
),AFAIK。变量的索引是按照它们在查询中出现的顺序隐式指定的。@JB Nizet的注释也是有效的--您不能将数字与
类似的
进行比较。如果要匹配
TABLE_NAME
列的部分字符串,则绑定变量应使用通配符包围,例如:
c.TABLE_NAME,如“%”|?| |“%”
(正确的连接运算符取决于RDBMS供应商)。我必须删除
后面的数字。将数字与
进行比较也是错误的,比如
,相反,我必须这样做:
。。。c、 TCL_编号=?
如@JB Nizet所述。