Java 编译时SQL中的单个代码问题
我写了一个SQLJava 编译时SQL中的单个代码问题,java,sql,compilation,escaping,Java,Sql,Compilation,Escaping,我写了一个SQL SELECT ID FROM NDA.K_FAKTURIER_KDF WHERE FAKTURIER_KDF_KZ = ? AND NVL(MANDANT, ' ') = (CASE ? WHEN '01180311' THEN 'BUTLERS'
SELECT ID
FROM NDA.K_FAKTURIER_KDF
WHERE FAKTURIER_KDF_KZ = ?
AND NVL(MANDANT, ' ') = (CASE ?
WHEN '01180311' THEN
'BUTLERS'
ELSE
' '
END)
在我的程序中,当我运行它时,我得到了错误
java.sql.SQLSyntaxErrorException: ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
在调试时,我发现Java编译器执行的查询如下
SELECT ID
FROM NDA.K_FAKTURIER_KDF
WHERE FAKTURIER_KDF_KZ = ?
AND NVL(MANDANT, ' ') = (CASE ?
WHEN 01180311 THEN
'BUTLERS'
ELSE
' '
END)`
Java编译器转义单个代码,那么有人能告诉我它将如何正常运行吗?您是否尝试使用PreparedStatement,并将“01180311”作为设置字符串参数传递?您是否尝试使用PreparedStatement,并将“01180311”作为设置字符串参数传递?假设MANDANT是字符字段,然后对
'01180311'
值执行仅字符操作可能会阻止编译器去掉引号
尝试将表达式中的
'01180311'
更改为'0118'| | 0311'
。假设MANDANT是字符字段,则对'01180311'
值执行仅字符操作可能会阻止编译器删除引号
尝试将表达式中的
'01180311'
更改为'0118'| | 0311'
。是否尝试转义该字符?当“01180311”时,请发布代码(至少相关部分)…MANDANT是字符还是数字字段?是否尝试转义字符?当“01180311”时,请发布代码(至少相关部分)…必填项是字符还是数字字段?+1是!让JDBC驱动程序找出数据类型的正确语法以及如何将参数放入查询中。+1是!让JDBC驱动程序找出数据类型的正确语法以及如何将参数放入查询中。