Using Coldfusion to Import data into mySQL
Many times we need a quick and easy way of importing data into our website databases. The CSV file format is one of the defacto standards for moving data between databases easily. Virtually all databases allow exported to CSV format. And virtually all database support importing a CSV formatted file. So why use Coldfusion to do this mundane task? Simply put it is database independant - in this example I created a simple script that reads a CSV file and inserts the records into a matched mySQL table. When I first started looking at this I was surprised that I could find very little of how to achieve this. So now that I have it worked out I thought I could share this little piece...
Lets set the stage:
Here is my CSV file - simple straight text file, comma delimited:
color,size,instock,style
Red,10,12,A
Blue,12,33,A
Green,6,3,A
This is a simple 4 column recordset, exported from Excel. I have a matched table created in mySQL with the following columns:
table: IDN (autonumber, primary key), color, size, instock, style
I then use the following Coldfusion code to consume and read the CSV file to a variable, then I loop through the file and insert accordingly. Some notes on this: csvdemo.csv is attached to this tutorial, the database for the SQL syntax is mySQL - but this basic syntax should universally work, the loop index is based on the delimters denoted the end of a line - for most CSV files this should work just fine.
<!--- get and read the CSV-TXT file --->
<cffile action="read" file="csvdemo.csv" variable="csvfile">
<!--- loop through the CSV-TXT file on line breaks and insert into database --->
<cfloop index="index" list="#csvfile#" delimiters="#chr(10)##chr(13)#">
<cfquery name="importcsv" datasource="#systemDSN#">
INSERT INTO csvdemo (color,size,instock,style)
VALUES
('#listgetAt('#index#',1, ',')#',
'#listgetAt('#index#',2, ',')#',
'#listgetAt('#index#',3, ',')#',
'#listgetAt('#index#',4)#'
)
</cfquery>
</cfloop>
<!--- use a simple database query to check the results of the import - dumping query to screen --->
<cfquery name="rscsvdemo" datasource="#systemDSN#">
SELECT * FROM csvdemo
</cfquery>
<cfdump var="#rscsvdemo#">
I hope your have found this helpful. Some things that I have done with this simple approach - I have created a script that collects CSV data files and autoimports them into a mySQL table - that table is then used for our Intranet reporting server. The CSV exported files are from a number of sources, Excel, Access and Dataflex databases.