Actually, to answer my own question, I think that if I call the close() method for the passed JDBC recordset after I've done with using it in other methods then this should do the trick. Am I right?
Richard > -----Original Message----- > From: Richard Meredith-Hardy [mailto:[EMAIL PROTECTED] > Sent: 30 April 2008 09:55 > To: CF-Talk > Subject: closing JDBC recordsets > > Let me say first off that I'm not very experienced with cfc's. > > Code below is a cfc to query a sage line 100 accounting db > from cf8.1 This works, a normal query via a regular > datasource type ODBC socket doesn't (though it does in CF5). > > My question: I understand that when using JDBC it is > important to make sure you close each resultset, statement > and connection. You'll notice I'm outputting a JDBC > recordset from the method sQuery in the var jdbcRecordset. > I'd like to do this so I can do various other things with it > in the next stage (ie actually call sQuery from other methods > in the cfc) BUT - by passing it like this, is it actually > closing the connection, or am I going to end up gobbling up > memory because it's passed it by reference and actually kept it open? > > Thanks > > Richard > > the script: > ========================================= > <cfcomponent > displayname="sageQuery" > output="false" > hint="Handles the reading and output of data from sage."> > > > <cffunction name="Init" > access="public" > returntype="sageQuery" > output="false" > hint="Returns an initialized sageQuery instance."> > > <!--- Return This reference. ---> > <cfreturn THIS /> > </cffunction> > > <CFFUNCTION name="sQuery" > hint="Returns a java recordset from the query"> > <CFARGUMENT name="datasource" > required="true" > hint="ODBC datasource name of the sage db to be > queried"> > <CFARGUMENT name="sql" > required="true" > hint="SQL to run in the sage query"> > <CFSET var uid = "xxx"> > <CFSET var pwd = "yyy"> > <CFSET var jdbcRecordset = ""> > > <cftry> > <!--- This cfobject creates a java object of type Class. > Leave this statement as it is. ---> > <cfobject type="JAVA" action="Create" name="Class" > class="java.lang.Class"> > <!--- The java class name for your driver is the > argument for Class.forName ---> > <cfset Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")> > <!--- This cfobject creates a DriverManager java object > which provides your connection ---> > <cfobject type="JAVA" action="Create" name="DriverManager" > class="java.sql.DriverManager"> > <!--- The getConnection method takes the JDBC URL for > your driver as its arguement ---> > <!--- jdbc:odbc:[datasource];[UID=username]; > [PWD=password];[args] ---> > <cfset con = > DriverManager.getConnection("jdbc:odbc:#ARGUMENTS.datasource#; > UID=#uid#; > PWD=#pwd#;")> > <!--- the createStatement method takes no arguments ---> > <cfset st = con.createStatement()> > <!--- Your query statement is the argument for executeQuery ---> > <!--- <cfset rs = st.executeQuery("SELECT ACCOUNT_NAME, > ACCOUNT_NUMBER FROM SALES_LEDGER")> ---> > <cfset rs = st.executeQuery("#sql#")> > <!--- <cfset ourQuery = resultSetToQuery(rs)> ---> > <cfset jdbcRecordset = rs> > <!--- When using JDBC it is important to make sure you > close each resultset, statement and connection. This is done > in the next block of code. ---> > > <cfset rs.close()> > <cfset st.close()> > <cfset con.close()> > > <cfcatch> > <cfdump label="Error 1" var="#cfcatch#"><cfabort> > </cfcatch> > </cftry> > > <CFRETURN jdbcRecordset> > > </CFFUNCTION> > </cfcomponent> > > ========================================= > > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;192386516;25150098;k Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:304459 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

