将Java字节数组作为ColdFusion查询参数传递时出错:输入不匹配' struct'期待RIGHTPAREN

时间:2016-07-28 16:11:04

标签: java coldfusion bytearray

我正在尝试将嵌入在.cfm文件中的一些CF(版本10)代码转换为组件的功能,作为Framework 1应用程序的一部分。该组件采用脚本语法,原始代码采用标记语法。我没有写原始代码,因为我还在学习ColdFusion,我只是试图复制原始代码而不是重写它。

该函数从客户端读入一个文件并将其切成碎片并将这些碎片存储在Java ByteArrays中。然后,它根据需要生成尽可能多的查询,以将字节数组存储在数据库中。我已成功将所有内容转换为实际插入查询。

我遇到的问题是转换这部分代码,主要是#objBuffer.Array()#:

<cfquery name="insertFile" datasource="#Datasource#">
    INSERT INTO wt_file (file_data,file_name,file_type,file_part,rec_id)
    VALUES (
        <cfqueryparam value="#objBuffer.Array()#" cfsqltype="CF_SQL_blob">, 
        <cfqueryparam value="#rc.fileName#" cfsqltype="cf_sql_varchar">,
        <cfqueryparam value="#rc.fileType#" cfsqltype="cf_sql_varchar">, 
        <cfqueryparam value="#i#" cfsqltype="cf_sql_varchar">, 
        <cfqueryparam value="#rc.rec_id#" cfsqltype="cf_sql_varchar">)
</cfquery>

objBuffer.Array()在java ByteBuffer对象上调用Java方法Array()。当我尝试在脚本语法中执行相同的操作时:

fileQuery = new Query(
    name="insertFile",
    datasource = Datasource,
    sql = "INSERT INTO wt_file
                (file_data, file_name, file_type, file_part, rec_id)
                VALUES (:data, :name, :type, :part, :recid)");

fileQuery.addParam(name="data", value = objBuffer.Array(), cfsqltype="CF_SQL_blob");
fileQuery.addParam(name="name", value = rc.fileName, cfsqltype="cf_sql_varchar");
fileQuery.addParam(name="type", value=rc.fileType, cfsqltype="cf_sql_varchar");
fileQuery.addParam(name="part", value=i, cfsqltype="cf_sql_varchar");
fileQuery.addParam(name="recid", value=rc.rec_id, cfsqltype="cf_sql_varchar");

/*execute query*/
fileQuery.execute();

在这种语法中,objBuffer.Array()调用会破坏整个函数。我试过在参数之前调用它并通过变量传递它,但在我调用它的地方并不重要。我得到了相同的结果。

eclipse给我的错误信息不是很有帮助,但无论如何我都会发布它:

mismatched input 'struct' expecting RIGHTPAREN       
0cfml.parsing.cfscript.CFParseException
null struct 137org.antlr.runtime.NoViableAltException
null function 52org.antlr.runtime.NoViableAltException
missing SEMICOLON at '('  0cfml.parsing.cfscript.CFParseException
null function 52org.antlr.runtime.NoViableAltException

因为我只是在转换代码,所以我相信这是一种更好的方法。我确信有一种方法可以在不使用java类的情况下完成此操作,但是如果有办法使这项工作也是如此,那就太棒了。任何帮助将不胜感激。

感谢。

0 个答案:

没有答案