coldfusion
Datenbankabfragen
Suche…
Mit Datenbanken arbeiten
Eine der Stärken von ColdFusion ist die einfache Arbeit mit Datenbanken. Natürlich können und sollten Abfrageeingaben parametrisiert werden.
Tag-Implementierung
<cfquery name="myQuery" datasource="myDatasource" result="myResult">
select firstName, lastName
from users
where lastName = <cfqueryparam value="Allaire" cfsqltype="cf_sql_varchar">
</cfquery>
CFScript-Implementierung
// ColdFusion 9+
var queryService = new query(name="myQuery", datasource="myDatasource");
queryService.addParam(name="lName", value="Allaire", cfsqltype="cf_sql_varchar");
var result = queryService.execute(sql="select firstName, lastName from users where lastName = :lName");
var myQuery = result.getResult();
var myResult = result.getPrefix();
// ColdFusion 11+
var queryParams = {lName = {value="Allaire", cfsqltype="cf_sql_varchar"}};
var queryOptions = {datasource="myDatasource", result="myResult"};
var myQuery = queryExecute("select firstName, lastName from users", queryParams, queryOptions);
Das Einfügen von Werten ist genauso einfach:
queryExecute("
insert into user( firstname, lastname )
values( :firstname, :lastname )
",{
firstname: { cfsqltype: "cf_sql_varchar", value: "Dwayne" }
,lastname: { cfsqltype: "cf_sql_varchar", value: "Camacho" }
},{
result: "local.insertResult"
});
return local.insertResult.generated_key;
Basisbeispiel
Datenbankverbindungen werden mit dem CF-Administrator-Tool eingerichtet. Informationen zum Verbinden einer Datenquelle finden Sie unter Datenbankverbindungen.
Zur Ausführung von Abfragen benötigen Sie <cfquery> das <cfquery> -Tag. Das <cfquery> -Tag stellt eine Verbindung zu der Datenbank her und öffnet sie. Sie müssen lediglich den Namen der Datenquelle angeben.
<cfquery name="Movies" datasource="Entertainment">
SELECT title
FROM Movies
</cfquery>
So zeigen Sie die Abfrageergebnisse an:
<cfoutput query="Movies">
#title#<BR>
</cfoutput>
Authentifizierung
Viele Datenbankkonfigurationen erfordern eine Authentifizierung (in Form eines Benutzernamens und eines Kennworts), bevor Sie die Datenbank abfragen können. Sie können diese mit den Benutzernamen- und Kennwortattributen angeben.
Hinweis: Der Benutzername und das Kennwort können auch für die Datenquelle in ColdFusion Administrator konfiguriert werden. Die Angabe dieser Details in Ihrer Abfrage setzt den Benutzernamen und das Kennwort in ColdFusion Administrator außer Kraft.
<cfquery datasource="Entertainment" username="webuser" password="letmein">
select *
from Movies
</cfquery>
Zwischengespeicherte Abfragen
Eine zwischengespeicherte Abfrage ist eine Abfrage, deren Ergebnisse im Arbeitsspeicher des Servers gespeichert sind. Die Ergebnisse werden gespeichert, wenn die Abfrage zum ersten Mal ausgeführt wird. Immer dann, wenn diese Abfrage erneut angefordert wird, ruft ColdFusion die Ergebnisse aus dem Arbeitsspeicher ab.
Sie können eine Abfrage mit dem Attribut " cachedAfter Cache cachedAfter . Wenn die Abfrage nach dem angegebenen Datum zuletzt ausgeführt wurde, werden zwischengespeicherte Daten verwendet. Andernfalls wird die Abfrage erneut ausgeführt.
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
</cfquery>
Um den Cache zu verwenden und mehrere Aufrufe der Datenbank zu vermeiden, muss die aktuelle Abfrage dieselbe SQL-Anweisung, Datenquelle, Abfragename, Benutzername und Kennwort als die zwischengespeicherte Abfrage verwenden. Dies beinhaltet Leerzeichen in der Abfrage.
Daher erzeugen die folgenden Abfragen unterschiedliche Caches, auch wenn die zugeschnittenen Zeichen und die Abfrageergebnisse identisch sind:
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
<cfif false>
where 1 = 1
</cfif>
<cfif true>
where 1 = 1
</cfif>
</cfquery>
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
<cfif true>
where 1 = 1
</cfif>
<cfif false>
where 1 = 1
</cfif>
</cfquery>
Begrenzung der Anzahl der zurückgegebenen Datensätze
Sie können die Anzahl der zurückgegebenen Zeilen mithilfe des Attributs maxrows .
<cfquery datasource="Entertainment" maxrows="50">
select *
from Movies
</cfquery>
Timeouts
Sie können ein Timeout-Limit mithilfe des timeout Attributs festlegen. Dies kann hilfreich sein, um zu verhindern, dass Anforderungen viel länger ausgeführt werden, als sie sollten, was sich auf die gesamte Anwendung auswirkt.
Das timeout Attribut legt die maximale Anzahl von Sekunden fest, die jede Aktion einer Abfrage ausführen darf, bevor ein Fehler zurückgegeben wird.
<cfquery datasource="Entertainment" timeout="30">
select *
from Movies
</cfquery>