lunedì, agosto 18, 2008

Oggi ColdFusion.

Ah quanto fastidio...

Mai provato a fare una query in ColdFusion 7 senza avere prima definito un datasource?

Ripeto: ah quanto fastidio...

Ma per fortuna è fattibile, attraverso JDBC e un uso oculato di createObject.
<cffunction name="pgQuery" output="false" returnType="any">
<cfargument name="server" required="yes" type="string">
<cfargument name="db" required="yes" type="string">
<cfargument name="login" required="yes" type="string">
<cfargument name="password" required="yes" type="string">
<cfargument name="sql" required="yes" type="string">
<cfargument name="queryName" required="yes" type="string">
<cfargument name="attendiResultSet" required="no" default="true" type="boolean">

<cftry>
<!--- la classe è definita? --->
<cfif NOT IsDefined("JDBCDriver")>
<cfset JDBCDriver=createObject("java","java.lang.Class").forName("org.postgresql.Driver").newInstance()>
<cfset DriverManagerClass=createObject("java","java.sql.DriverManager")>
</cfif>

<cfset strURL = "jdbc:postgresql://#server#/#db#">
<!--- Mi connetto al DB --->
<cfset dbConnection=DriverManagerClass.getConnection(strURL, login, password)>

<cfset st = dbConnection.createStatement()>

<cfif attendiResultSet eq "true">
<cfset resultSet = st.executeQuery(sql)>
<cfscript>
"#queryName#" = CreateObject("java", "coldfusion.sql.QueryTable").init(resultSet);
resultSet.close(); st.close(); dbConnection.close();
return "#queryName#";
</cfscript>
<cfelse>
<cfset st.execute(sql)>
<cfscript>
st.close(); dbConnection.close();
</cfscript>
<cfreturn QueryNew("")>
</cfif>
<cfcatch>
<cfset InviaEmailErrore("pgQuery #server# - #db# - #sql#",cfcatch)>
<cfreturn QueryNew("")>
</cfcatch>
</cftry>

</cffunction>


Nella stringa


si può sostituire postgresql con un altro driver (ad esempio odbc).

Si badi che il codice è "sporco", ma funziona.

Etichette:


This page is powered by Blogger. Isn't yours?