Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
Java 编译时SQL中的单个代码问题_Java_Sql_Compilation_Escaping - Fatal编程技术网

Java 编译时SQL中的单个代码问题

Java 编译时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'

我写了一个SQL

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驱动程序找出数据类型的正确语法以及如何将参数放入查询中。