我们在具有SQL查询的应用程序中使用hibernate来获取记录计数和数据。
我们使用类似于下面的查询(其中一些select子句字段名称中包含'#'),例如,
select count(*) as count
from (
select distinct field#1, field#2
from some_table1 st1,
some_table2
where st1.id = st2.id
and st1.updated_date between to_date(?, 'MM/DD/YYYY HH24:mi:ss) and to_date(?, 'MM/DD/YYYY HH24:mi:ss)
)
查询位于属性文件中,并使用字符串参数化方法替换绑定变量。
使用log4j2参数将日志信息打印到控制台。
<Logger name="org.hibernate" level="debug"/> <Logger name="org.hibernate.SQL" level="debug"/> <Logger name="org.hibernate.type.descriptor.sql" level="trace"/>
我能够打印设置到查询的绑定值,但没有看到任何问题。
在我使用eclipse编辑器更改查询的应用程序中,得到了以下异常。
WARN org.hibernate.util.JDBCExceptionReporter - SQL错误:1858,SQLState:22008 错误org.hibernate.util.JDBCExceptionReporter - ORA-01858:找到了数字所在的非数字字符
日志打印了SQL查询,并且在Toad for oracle中没有任何问题。
出于某种原因,我注意到文件的来源(不确定它有什么编码)工作没有任何问题, 即使我使用Beyond Compare工具将其合并到我的工作目录,应用程序也能正常工作。
在选择查询的字段名称中使用#时,我不确定eclipse编码是否会引起问题。
这是因为编码问题吗?
- 确认这不是问题,因为编码。
答案 0 :(得分:0)
尝试使用
SELECT count(*) AS COUNT
FROM
( SELECT DISTINCT field#1,
field#2
FROM some_table1 st1,
some_table2
WHERE st1.id = st2.id
AND st1.updated_date BETWEEN to_date(?, 'MM/DD/YYYY HH24:mi:ss') AND to_date(?, 'MM/DD/YYYY HH24:mi:ss') )