È libreria di database C ++ OTL SQL utilizzando query con parametri sotto il cofano, o concat stringa?
-
01-10-2019 - |
Domanda
Sono stato a guardare l'OTL (Oracle, ODBC e DB2 CLI-Template Library) per C ++ accesso al database. Io sono sicuro di se la query passo in viene convertito in una query con parametri per il database sottostante, o se è fondamentalmente solo concatenare tutti gli argomenti in un unico grande corda e passare la query al database in questo modo. Vedo che la query si passa ad esso può includere informazioni sul tipo per gli argomenti, ma quello che succede tra allora e la query che colpisce il database, non posso dire.
Soluzione
OTL risposta dell'autore alla mia e-mail:
OTL passa query con segnaposti negli strati API DB. Le convenzioni di denominazione per le variabili di bind effettivi sono diversi per i diversi tipi di DB. Dire, per Oracle,
SELECT * FROM staff WHERE fname=:f_name<char[20]>
sarà tradotto in:
SELECT * FROM staff WHERE fname=:f_name
più un mucchio di chiamate bind variabile host.
Per MS SQL Server o DB2, lo stesso SELEZIONA sarebbe simile a questa:
SELECT * FROM staff WHERE fname=?
E 'descritto nel manuale che non si può avere un segnaposto con lo stesso nome più di una volta per MS SQL, DB2. istruzioni SQL con segnaposto / bind variabili sono relativamente costosi per creare, quindi se si crea un'istanza di uno SQL parametrizzato tramite un otl_stream, ha senso per riutilizzare il flusso il più possibile.
Se avete altre domande, o suggerimenti su come posso migliorare il manuale di OTL, sentitevi liberi di scrivermi.
Saluti, Sergei
pheadbaq ha scritto:
Ciao, ho valutando C ++ DB librerie di recente per l'uso come base per una libreria ORM desidero costruire, e sono stati gravitando sempre più verso l'OTL. Sembra molto bello tra l'altro, e sembra che sarebbe soddisfare la maggior parte delle esigenze che ho. Ho solo una domanda persistente che io non riesco a chiarire leggendo la documentazione. Fa OTL passare una query con parametri al DBMS sottostanti, o è concatenare gli argomenti e di query passo al flusso OTL in un'unica stringa e la mano che al DBMS?
In altre parole, se la mano OTL questa query MSSQL, insieme con la stringa "Bob", come la variabile di legatura:
SELECT * FROM staff WHERE fname = :f_name<char[20]>
Fa i prodotti OTL parser questo:
SELECT * FROM staff WHERE fname = 'Bob'
O questo:
SELECT * FROM staff WHERE fname = @f_name
insieme con la mia stringa come parametro
Ho postato questa stessa domanda a StackOverflow.com se si cura di rispondere lì: è C ++ OTL SQL libreria di database utilizzando query con parametri sotto il cofano, o concat stringa?
Grazie per il vostro tempo
Altri suggerimenti
La documentazione parla tutto su variabili di bind. Presumo che la libreria è riscrivere la tua ricerca, ma è probabilmente solo cambiare il formato delle variabili di bind nel formato DBMS si aspetta, e poi vincolanti i valori alle variabili di bind.