我有一个简单的查询查询语句,如下所示:
<cfquery name="rsProductTypeID" dbtype="query">
SELECT
ProductTypeID
FROM
rsProductTypes
WHERE
ProductType = <cfqueryparam value="Computers" cfsqltype="cf_sql_nvarchar"/>;
</cfquery>
所有这一切都是要求记录集ProductTypeID
中的主键值rsProductType
,具体取决于我们要求的ProductType
。
出于某种原因,上述查询给出了这个错误:
PreparedStatement.setNString(int,java.lang.String)
但是,如果我更改查询查询并删除<cfqueryparam>
部分并将其替换为普通文本,那么它可以正常工作。这是工作代码:
<cfquery name="rsProductTypeID" dbtype="query">
SELECT
ProductTypeID
FROM
rsProductTypes
WHERE
ProductType = 'Computers';
</cfquery>
我无法分辨使用<cfqueryparam>
时导致失败的代码之间的差异。
答案 0 :(得分:4)
我想我想通了......当ColdFusion返回记录集时,它不会保留数据库中的原始数据类型。在我的数据库ProductType
中定义为nvarchar(50)
,但ColdFusion将其返回为varchar
格式。因此cfsqltype
属性导致错误。我将cfsqltype属性更改为cf_sql_varchar
,它工作正常。非常烦人,但你能做些什么。
我将其发布为自我答案,以防其他人收到此错误。不确定这是否违反规则。
答案 1 :(得分:2)
cf_sql_nvarchar
不是cfsqltype
cfqueryparam
属性的有效值
文档:https://wikidocs.adobe.com/wiki/display/coldfusionen/cfqueryparam