Hug*_*Bob 5 coldfusion timestamp oracle10g oracle11g coldfusion-8
我们有一个使用Oracle时间戳的ColdFusion 8(Linux)应用程序.我们刚刚从10g转换为Oracle 11g,我们现在在数据源上使用Oracle的瘦客户端.我们在选择了时间戳列的应用程序中收到错误.
似乎oracle.sql.TIMESTAMP正在返回类的对象.我通过转储列的内容来验证这一点.果然,它让我分解了对象的方法及其返回类型.但是,我似乎无法直接与此对象接口:
<cfquery name="getstuff" ...>
SELECT timestampfld ...
FROM myTable
</cfquery>
Run Code Online (Sandbox Code Playgroud)
getstuff.timestampfld包含一个对象.但是,这样做:
<cfoutput query="getstuff">
#timestampfld.stringValue()#
#timestampfld.dateValue()#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
产生错误,表示无法找到这些方法.如何获取该对象中的数据?
来自评论的更新:
当我获取列值并将该DateFormat()函数应用于它.CF错误是"值类oracle.sql.timestamp无法转换为日期".当我执行时<cfoutput>,我得到了类定义.
在检索到的列中,我似乎得到一个对象而不是字符串.当我cfdump列时,我得到oracle.sql.TIMESTAMP的OBJECT.转储列出了可用的方法和字段.当我cfout输出相同的变量时,会显示一个字符串.当我尝试对DataFormat()变量执行操作时,它会抱怨它不是日期.
我只是在开发过程中偶然发现了这个错误。我过去曾经有过它,但从那以后我就忘记了它。我知道有两种缓解方法:第一种是根据有关不同上下文中相同错误消息的问题的答案。将以下内容添加到文件jvm.config中
-Doracle.jdbc.J2EE13Compliant=true
Run Code Online (Sandbox Code Playgroud)
第二个是不返回 Oracle TIMESTAMP 列,而是 CAST 它执行 DATE,首先,就像
<cfquery name="getstuff" ...>
SELECT CAST( timestampfld as DATE ) timestampfld
FROM myTable
</cfquery>
Run Code Online (Sandbox Code Playgroud)
说实话,我对这两个都不满意。当忘记 JVM 参数时,软件就会崩溃。另一方面,CAST 可能会影响 SQL 的工作方式。