我正在尝试将嵌入在.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类的情况下完成此操作,但是如果有办法使这项工作也是如此,那就太棒了。任何帮助将不胜感激。
感谢。