尝试使用查询查询时PreparedStatement.setNString(int,java.lang.String)错误

时间:2014-08-15 17:22:33

标签: coldfusion coldfusion-10

我有一个简单的查询查询语句,如下所示:

<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>时导致失败的代码之间的差异。

2 个答案:

答案 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