我们有一个使用 Oracle 时间戳的 ColdFusion 8 (Linux) 应用程序。我们刚刚从 10g 转换为 Oracle 11g,现在在数据源上使用 Oracle 的瘦客户端。我们在选择时间戳列的应用程序中遇到错误。
看起来好像是一个类的对象oracle.sql.TIMESTAMP
正在被退回。我通过转储该列的内容来验证这一点。果然,它让我详细了解了对象的方法及其返回类型。但是,我似乎无法直接与该对象交互:
<cfquery name="getstuff" ...>
SELECT timestampfld ...
FROM myTable
</cfquery>
getstuff.timestampfld
包含一个对象。但是,这样做:
<cfoutput query="getstuff">
#timestampfld.stringValue()#
#timestampfld.dateValue()#
</cfoutput>
产生错误,指出无法找到这些方法。我如何获取该对象中保存的数据?
评论更新:
当我获取列值并应用DateFormat( timestampfld, "dd.mm.yyyy" )
对它起作用。 CF 误差为
"The value class oracle.sql.timestamp cannot be converted to a date".
当我表演时<cfoutput>
,我得到了类定义。
在检索到的列中,我似乎得到了一个对象而不是字符串。当我 cfdump 该列时,我得到 OBJECT OF oracle.sql.TIMESTAMP。转储列出了可用的方法和字段。当我输出相同的变量时,会显示一个字符串。当我尝试执行DataFormat()
在变量上,它抱怨它不是日期。
我只是在开发过程中偶然发现了这个错误。我过去曾经有过它,但从那以后我就忘记了它。
我知道有两种缓解方法:
第一个是根据answer https://stackoverflow.com/a/51056612/577052关于不同上下文中相同错误消息的问题。
可以将以下内容添加到jvm.config
file
-Doracle.jdbc.J2EE13Compliant=true
第二个是不返回 Oracle TIMESTAMP 列,而是 CAST 它执行 DATE,首先,就像
<cfquery name="getstuff" ...>
SELECT CAST( timestampfld as DATE ) timestampfld
FROM myTable
</cfquery>
说实话,我对这两个都不满意。当忘记 JVM 参数时,软件就会崩溃。另一方面,CAST 可能会影响 SQL 的工作方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)