Raymond Camden's Blog Rss

Hooking up ColdFusion and SQLite

10

Posted in ColdFusion | Posted on 09-24-2009 | 5,598 views

Need to hookup ColdFusion to SQLite? I did. I normally only use SQLite for AIR development, but I had a situation where I needed to seed a database with a large set of data. While AIR can easily do this (it can create the database, the tables, and initial data), I thought it would be nicer if the database was simply prepoulated.

I began by first creating my SQLite database by using Lita. This is an AIR based SQLite editor. I had a few issues with it, but eventually I got it working right. I created the file and my table to get it ready for ColdFusion.

My Google search for JDBC drivers turned up SQLiteJDBC. I downloaded the first JAR file and save it to my ColdFusion classes folder. I restarted ColdFusion and then went and create my DSN. I selected Other for the type and used the following settings:

JDBC URL: jdbc:sqlite:/Users/ray/Documents/words.db

This value should begin with jdbc:sqlite: and then end with the full path to the file.

Driver Class: org.sqlite.JDBC

And then everything else, but the name of course, was blank. I confirmed the datasource connected ok in both the ColdFusion Admin and in ColdFusion Builder's RDS panel.

Ok, now for the fun part. I wanted to use ColdFusion to seed the database with a set of words that came from a text file. I used the following code, which I assume is self-explanatory and not really an important part of the blog entry:

view plain print about
1<cfsetting enablecfoutputonly="true">
2<cfset wordList = "/Users/ray/Desktop/word_list_moby_freq_broad_corpus-flat/word_list_moby_freq_broad_corpus.flat.txt">
3
4<cfloop index="word" file="#wordList#">
5    <cfset word = trim(word)>
6    <cfif len(word) gt 2>
7        <cfoutput>#word#<br>
8        </cfoutput>
9        <cfquery datasource="sqllitetest">
10        insert into WORDS(word)
11        values(<cfqueryparam cfsqltype="cf_sql_varchar" value="#word#">)
12        </cfquery>
13        <cfflush>
14    </cfif>
15</cfloop>

This threw an interesting error though: statement is not executing. I didn't quite know what to make of that, but on a whim, I changed my queryparam line to this:

view plain print about
1values('#word#')

And all of a sudden - it worked. So either the driver doesn't support bound parameters or I set up something wrong, but this did the trick. For another example, check this blog entry that was shared with me on Twitter.

Comments

[Add Comment] [Subscribe to Comments]

Ray, I think you forgot an end [/code] tag
Thanks. Remind me not to blog until I've had my 5 cups of coffee.
Odd. It must be the driver. SQLLite (when used in an AIR context) supports prepared statements. Here is a code sample of how to do that:

http://www.nodans.com/index.cfm/2007/10/31/Fixed-e...

DW
Yeah, definitely, and thanks Dan, I should have made it clear that AIR had no problems doing prepared crap with SQLite.
I get this error when trying to create the datasource
"java.sql.SQLException: No suitable driver available for Test, please check the driver setting in resources file, error: org.sqlite.JDBC The root cause was that: java.sql.SQLException: No suitable driver available for Test, please check the driver setting in resources file, error: org.sqlite.JDBC".
I am a bit confused what to do with jar file. The classes directory contains classes but the lib directory jar files. As ever late to the show and struggling to throw a six
Try going to your CF Admin, Server Settings - Java and JVM - and adding a folder to your ColdFusion Class Path. Put the jar there. Restart CF. Try again.
Raymond, thanks for sharing this trick to get me started.

I wrote a library that handles setting up and mapping a SQLite database filename to a ColdFusion data source -- you can call it from the Application.onRequestStart() event. https://github.com/bkidwell/cfsqlite . To anyone who wants to use an SQLite databse in a CF app, I hope this helps!
You should submit it to RIAForge too.
> You should submit it to RIAForge too.

Done. (But I expect it won't appear until it makes its way through the submission queue.) Thanks for prompting me to submit it.
I know the guy who runs RIAForge. I'll yell at em.

[Add Comment] [Subscribe to Comments]