2012-07-18 6 views
11

Desidero connettere e utilizzare il database sql all'interno dell'applicazione C++. La mia applicazione ha bisogno di memorizzare alcuni dati (possono essere memorizzati sotto forma di tabelle) che crescerà continuamente e devono essere condivisi tra diversi processi - quindi ho bisogno di un database. Ho selezionato sql perché è raccomandabile per i principianti e ho bisogno di più writer quindi no SQLite.Quale opzione selezionare per utilizzare sql in C++

Nella ricerca ho trovato le seguenti opzioni (Queste opzioni potrebbero includere ORMS, API e driver e alcune di queste opzioni potrebbero non essere incluse anche - ovvero ho sbagliato completamente a comprendere quell'opzione, quindi correggimi):

  1. SQLAPI++ - Source (anche sito ufficiale)
  2. MySQL Connector/C++ (. Alcuni vantaggi sono anche dato lì) - Source
  3. MySQL++
  4. CppDB
  5. SOCI
  6. Libodbc++ (funziona in cima a ODBC)
  7. Database Template Library - Source
  8. Oracle Template Library
  9. Uso sql.h con ODBC:
    Scelte per ODBC:
    a. MYSQL Connector/ODBC
    b. EasySoft ODBC
    c. Some Others

discussioni Alcuni 'così che mi aiutano a trovare queste scelte: T1, T2, T3, T4.

Le mie domande:

  1. Quale possibilità di utilizzare e quando? Vantaggi/Svantaggi di queste opzioni? (può essere basata su performance, learning curve, compatibility, present support.) non v'è alcun punto di riferimento o suggerimento per la selezione tra queste opzioni. (io davvero non so su queste opzioni, in modo da può essere alcune di queste opzioni necessarie per raggruppare insieme per farli lavorare cioè possono essere alcune delle opzioni sono interdipendenti.)
  2. Quali sono i necessari set di strumenti per queste opzioni.
  3. Se si utilizza qualsiasi libreria dipendente da ODBC, quindi quale da usare ODBC. (Ci sono molti ODBC menzionati nel link "Alcuni altri" sopra).
  4. Qualsiasi fonte per apprenderli.(Per alcune delle opzioni ho già menzionato una fonte.)
  5. C'è qualcos'altro che mi è sfuggito, del tutto?
  6. Cosa succede se la mia domanda è in C? (questo è perché ho anche bisogno di sviluppare un'applicazione in C che utilizza sql)

So che ho chiesto troppo. Si prega di dare suggerimenti per qualsiasi parte particolare.

+2

http://stackoverflow.com/faq#dontask – Adam

+0

Troppo già! Si prega di tenerlo breve e conciso. –

+0

So che questo non segue la regola So, in breve. Ma ho bisogno di sapere e così è il posto migliore. Anche questo non è del tutto contrario a quella regola. Pertanto, gli utenti che rispondono a domande pratiche relative a questo tag possono essere utili per questa domanda. –

risposta

2

Le domande principali da tenere in considerazione sono la modalità di utilizzo multipiattaforma, sia sull'applicazione che sul lato del database.

Se è necessario connettersi potenzialmente a più di un server di database relazionale (ad esempio Oracle e MySQL o Firebird), è probabile che si stia utilizzando ODBC (per quello che vale io uso UnixODBC). Non ho usato SQLAPI ++ o SOCI quindi non posso dire molto su come questi si confrontino con UnixODBC.

Con UnixODBC, si ottiene un sacco di scelta nella distribuzione. Molto spesso, in realtà non installo UnixODBC, e invece connetto un'applicazione direttamente al driver ODBC (questo è utile se una particolare istanza sta per parlare solo con un singolo database e minimizza le cose che è necessario installare). Funziona anche con C++ e C.

Con UnixODBC -> MS SQL Server, utilizziamo il driver FreeTDS. Inizialmente ero preoccupato di andare in produzione con questo, ma in effetti ho scoperto che il protocollo del filo è completamente specificato, quindi questo è più di un trucco modificato (e credo anche che gli stessi ragazzi che fanno FreeTDS facciano anche i driver commerciali EasySoft). MySQL fornisce autonomamente i driver compatibili con UnixODBC.

Non ho provato UnixODBC -> Oracle, poiché avevo già scritto un'interfaccia OCI (instant client) diretta e l'abbiamo sempre utilizzata.

UnixODBC è leggermente più lento rispetto all'utilizzo di un approccio con protocollo filo come OCI, ma la differenza non è abbastanza significativa da preoccuparsi. Il motivo per cui utilizziamo OCI è che Oracle lo fornisce gratuitamente per piattaforme Linux/AIX/Solaris, mentre non sono riuscito a trovare i driver Oracle Oracle per queste piattaforme.