È libreria di database C ++ OTL SQL utilizzando query con parametri sotto il cofano, o concat stringa?

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

  •  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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top