我有一些文本文件,我必须在SQL中的一个表中插入。我有我的文本文件名称存储在单独的表。我必须从该表中获取名称,然后使用fileOpen()
从特定文件夹获取文件。完成该步骤后,我有问题要决定什么是执行下一步的最佳方法。所以我必须使用fileReadLine()
来获取每个文本文件行的上下文。此外,我不应该读第一行,因为它只包含列名。第二,我必须检查一次,我打到文件的结尾。在最后我必须循环并在表格中执行INSERT。我想知道是否有任何新的方法来做到这一点?我目前的代码有两个cfloops
,看起来效率很低。这里是我当前的代码:使用ColdFusion和SQL插入文本文件的最佳方法?
<!--- Grab stuff from File Table. --->
<cfquery datasource="test" name="myQuery1">
SELECT *
FROM FilesTxt
</cfquery>
<cfloop query="myQuery1">
<!--- Read File --->
<cfset dataFile = fileOpen(here is my path&"\"&#FileName#, "read") />
<cfset line = fileReadLine(dataFile) />
<!--- Loop to see if hit the end of file, if not, read next line --->
<cfloop condition="!fileIsEOF(dataFile)">
<cfset line = fileReadLine(dataFile) />
<cfif trim(line) NEQ "">
<cfset line = #Replace(line,"'","","ALL")#>
<cfset line = #Replace(line,'"',"","ALL")#>
<!--- Build array of junk in the file --->
<cfset sList = ListToArray(line, chr(9),'yes')>
<cftry>
<cfquery datasource="test" name="Insert">
//Here is my Insert statement
</cfquery>
</cftry>
</cfif>
</cfloop>
</cfloop>
我在想这样做单独的循环,将创建数组应插入,然后运行另一个循环做插入的所有元素。我不确定这种情况下最好的方法是什么。如果有人知道任何其他方式,请让我知道。由于
大多数数据库都有工具来加载文本文件,这通常比循环更有效。这些工具是DBMS特有的。在MySQL上进行搜索 - LOAD DATA,SQL Server - BULK INSERT等。有很多例子。 (顺便说一句,有数据库问题,总是包括你的DBMS和版本。) – Leigh