Ist C ++ OTL SQL-Datenbankbibliothek mit parametrisierte Abfragen unter der Haube oder String concat?

StackOverflow https://stackoverflow.com/questions/3149974

  •  01-10-2019
  •  | 
  •  

Frage

Ich habe an der OTL suchen (Oracle, ODBC und DB2-CLI-Template Library) für C ++ Datenbankzugriff. Ich bin nicht sicher, ob die Abfrage, die ich auf eine parametrisierte Abfrage für die zugrunde liegende Datenbank konvertiert passieren in ist, oder wenn es im Grunde nur alle Argumente in eine große Zeichenfolge verketten und Leiten der Anfrage an die Datenbank auf diese Weise. Ich sehe, dass die Abfrage Sie es passieren können Typinformationen für die Argumente enthalten, aber was passiert zwischen damals und die Abfrage der Datenbank treffen, kann ich nicht sagen.

War es hilfreich?

Lösung

OTL Autor Antwort auf meine E-Mail:

geht OTL Abfragen mit Platzhalter in die DB-API-Schichten. Die Namenskonventionen für die tatsächlichen Bindungsvariablen sind für verschiedene DB-Typen. Sprich, für Oracle,

SELECT * FROM staff WHERE fname=:f_name<char[20]>

wird in übersetzt werden:

SELECT * FROM staff WHERE fname=:f_name

plus eine Reihe von Host-Variable binden Anrufe.

Für MS SQL Server oder DB2, die gleiche SELECT würde wie folgt aussehen:

SELECT * FROM staff WHERE fname=?

Es ist im Handbuch beschrieben, dass Sie nicht einen Platzhalter mit dem gleichen Namen mehr als einmal für MS SQL, DB2 haben können. SQL-Anweisungen mit Platzhalter / Bind-Variablen sind relativ teuer zu erstellen, wenn Sie also eine parametrisierte SQL über eine otl_stream instanziiert, macht es Sinn, den Strom so viel wieder zu verwenden, wie Sie können.

Wenn Sie weitere Fragen haben, oder Vorschläge, wie ich das OTL Handbuch verbessern können, können Sie mich per E-Mail.

Cheers, Sergei

pheadbaq schrieb:

Hallo, ich habe die Bewertung C ++ DB-Bibliotheken vor kurzem auf den Einsatz als Basis für eine ORM-Bibliothek ich aufbauen wollen, und haben sich mehr und mehr in Richtung der OTL worden gravitierende. Es sieht sehr schön von der Art und Weise, und scheint, wie es die meisten Bedürfnisse erfüllen würde ich habe. Ich habe nur eine verweilende Frage, dass ich nicht durch das Lesen der Dokumente zu klären scheinen. Does OTL passieren eine parametrisierte Abfrage auf den zugrunde liegenden DBMS, oder ist es die Argumente verketten und Abfrage Ich gehe an den OTL Strom in einem einzelnen String und Hand, dass an das DBMS?

Mit anderen Worten, wenn ich Hand OTL diese MSSQL Abfrage, zusammen mit der Zeichenfolge „Bob“ als Bindevariable:

SELECT * FROM staff WHERE fname = :f_name<char[20]>

Hat der OTL-Parser produzieren diese:

SELECT * FROM staff WHERE fname = 'Bob'

Oder diese:

SELECT * FROM staff WHERE fname = @f_name

zusammen mit meinem String als Parameter

Ich habe diese gleiche Frage StackOverflow.com gebucht, wenn Sie dort zu reagieren pflegen: Ist C ++ OTL SQL Datenbank Bibliothek parametrisierte Abfragen unter der Haube, oder String concat?

Vielen Dank für Ihre Zeit

Andere Tipps

Die Dokumentation alle über Bind-Variablen spricht. Ich gehe davon aus, dass die Bibliothek ist Umschreiben Ihre Anfrage, aber es ist wahrscheinlich nur das Format der Bindevariablen in das Format zu ändern DBMS erwartet, und dann zu den Bind-Variablen, die Werte zu binden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top