2013-05-07 21 views
25

Próbuję połączyć bazę danych z mojej witryny i wyświetlić niektóre wiersze przy użyciu C++. Tak więc zasadniczo próbuję utworzyć aplikację, która wykonuje zapytanie wybrane z tabeli z mojej bazy danych witryny. Teraz to musi być możliwe, ponieważ widziałem mnóstwo aplikacji.Jak podłączyć bazę danych MySQL za pomocą C++

Jak to zrobić? Czy ktoś może zrobić przykład i powiedzieć mi, z jakich bibliotek mam korzystać?

+0

Sprawdź tę odpowiedź - http://stackoverflow.com/questions/8261822/complete-end-to-end-tutorial-c-with-mysql-server-5-5 –

Odpowiedz

24

Oczywiste jest, że nie szukałem w odpowiednich narożnikach Internecie, ponieważ znalazłem an example w ciągu kilku sekund:

/* Standard C++ includes */ 
#include <stdlib.h> 
#include <iostream> 

/* 
    Include directly the different 
    headers from cppconn/ and mysql_driver.h + mysql_util.h 
    (and mysql_connection.h). This will reduce your build time! 
*/ 
#include "mysql_connection.h" 

#include <cppconn/driver.h> 
#include <cppconn/exception.h> 
#include <cppconn/resultset.h> 
#include <cppconn/statement.h> 

using namespace std; 

int main(void) 
{ 
cout << endl; 
cout << "Running 'SELECT 'Hello World!' » 
    AS _message'..." << endl; 

try { 
    sql::Driver *driver; 
    sql::Connection *con; 
    sql::Statement *stmt; 
    sql::ResultSet *res; 

    /* Create a connection */ 
    driver = get_driver_instance(); 
    con = driver->connect("tcp://127.0.0.1:3306", "root", "root"); 
    /* Connect to the MySQL test database */ 
    con->setSchema("test"); 

    stmt = con->createStatement(); 
    res = stmt->executeQuery("SELECT 'Hello World!' AS _message"); // replace with your statement 
    while (res->next()) { 
    cout << "\t... MySQL replies: "; 
    /* Access column data by alias or column name */ 
    cout << res->getString("_message") << endl; 
    cout << "\t... MySQL says it again: "; 
    /* Access column fata by numeric offset, 1 is the first column */ 
    cout << res->getString(1) << endl; 
    } 
    delete res; 
    delete stmt; 
    delete con; 

} catch (sql::SQLException &e) { 
    cout << "# ERR: SQLException in " << __FILE__; 
    cout << "(" << __FUNCTION__ << ") on line " » 
    << __LINE__ << endl; 
    cout << "# ERR: " << e.what(); 
    cout << " (MySQL error code: " << e.getErrorCode(); 
    cout << ", SQLState: " << e.getSQLState() << ")" << endl; 
} 

cout << endl; 

return EXIT_SUCCESS; 
} 
+2

Czy potrzebuję do tego libarys? I czy to jest bezpieczne? Ponieważ ktoś powiedział, że nigdy nie powinno się przechowywać haseł w pliku. – lepel100

+0

Biorąc pod uwagę, że jest to plik źródłowy, który zostanie skompilowany w plik binarny, który (prawdopodobnie) zostanie rozprowadzony, jest dość bezpieczny. Ponadto będziesz potrzebować biblioteki mysql, wyszczególnionej na stronie z linkami. – hd1

+4

To nie jest bezpieczne. Łatwo wyodrębnić wszystkie ciągi z pliku binarnego, aby uzyskać hasło. A bardziej kompetentny napastnik może zobaczyć, gdzie nazywasz 'driver_connect()' i po prostu wróć do hasła w pliku binarnym. Ale to nie jest poziom bezpieczeństwa. * Serwer * jest jedynym, który może wymuszać bezpieczeństwo. Powinieneś utworzyć osobne konta dla wszystkich, a zamiast tego zapytaj o nazwę użytkownika i hasło podczas uruchamiania. Jeśli to nie jest opcja, ogranicz dostęp do tego, aby użytkownik był albo tylko do odczytu, albo stwórz własny proces serwera, który obsługuje tylko zadania, które powinny być dozwolone. – uliwitness

5

Tak, trzeba MySQL biblioteka C++ złącza. Przeczytaj poniżej, gdzie wyjaśnię, jak uzyskać przykład podany przez programistów mysql do działania.

Uwaga (i roztwór): IDE:Próbowałem za pomocą Visual Studio 2010, ale zaledwie kilka sconds temu dostał to wszystko do pracy, wydaje się, że brakowało mi go w podręczniku, ale sugeruje, aby korzystać wizualna Studio 2008. Pobrałem i zainstalowałem VS2008 Express dla wersji C++, wykonałem kroki opisane w rozdziale 5 instrukcji i zniknęły błędy! To działa. Jestem szczęśliwy, problem rozwiązany. Z wyjątkiem tego, jak zmusić go do pracy w nowszych wersjach visual studio. Powinieneś wypróbować mysql dla Visual Studio Addon, który może uzyskać wersję vs2010 lub wyższą, aby połączyć się pomyślnie. Można go pobrać z witryny mysql

Próbując uzyskać powyższy przykład, działam, znajduję się tutaj z powodu problemów ze zmianami na stronie internetowej mysql dev. Przepraszam, że napisałem to jako odpowiedź, ponieważ nie mogę jeszcze komentować, i zmienię to, gdy odkryję, co należy zrobić, i znajdę rozwiązanie, aby pomóc przyszłym programistom (ponieważ stało się to tak duże, że nie byłoby to możliwe). t tak czy inaczej pasuje, haha)

@ hd1 link do "przykładu" już nie działa. Podążając za linkiem, przejdziesz na stronę, która zawiera link do głównej instrukcji. Główny podręcznik jest dobrym odnośnikiem, ale wydaje się być dość stary i przestarzały, a dla nowych programistów trudny, ponieważ nie mamy doświadczenia, zwłaszcza jeśli brakuje jakiegoś pliku, a następnie co dodać.

@ HD1 jest związek został przeniesiony, a także z szybkiego wyszukiwania można znaleźć poprzez usunięcie elementów zawartości, zachowując tylko nazwę artykułu, tutaj jest tak czy inaczej:http://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html

Pierwsze 7,5 MySQL Connector/C++ pełna Przykład 1 pracować

Pobrano:

Get The mysql C++ złącza, mimo że jest większy wybór pakietu instalacyjnego, a nie zamek błyskawiczny.

-Użyj bibliotek boost z boost.org, ponieważ boost jest używany w connection.h i mysql_connection.h od mysql C++ złącza

teraz przystąpić:

Instaluje złącza na dysku C, a następnie przejść do serwera mysql zainstalować folder/lib i skopiować wszystkie pliki libmysql i wklej w złączu zainstalować Folder/lib/opt

-Extract biblioteki Boost do dysku c

Następny:

jest alrig ht, aby skopiować kod taki, jaki jest z przykładu (link powyżej i oczywiście do nowego projektu C++). Można zauważyć błędy:

-pierwsze: zmiany

cout << "(" << __FUNCTION__ << ") on line " » 
<< __LINE__ << endl; 

do

cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; 

Nie wiesz, co to malutki podwójna strzałka jest, ale nie sądzę, że jest częścią C++

-Sekcja: Usuń inne błędy z nich, czytając Chapter 5 of the sql manual, zanotuj mój akapit dotyczący rozdziału 5 poniżej

[Uwaga 1]: Rozdział 5 Zastosowania Building MySQL Connector/C++ Windows z Microsoft Visual Studio Jeśli zastosujemy ten rozdział, wykorzystując najnowszą C++ connecter, będzie prawdopodobnie zobaczyć, że to, co jest w folderze złącza i to, co jest pokazane na obrazach są zupełnie inne. Niezależnie od tego, czy szukasz instalacji serwera mysql i folderów lib, czy folderów mysql C++ złączy i folderów lib, to nie będzie idealnie pasować, chyba że zaktualizuje instrukcję lub masz magiczne pobieranie, ale dla mnie nie sędziowskim pobrania złącza zainicjowanego marca 2014

Wystarczy postępować, że rozdział 5,

-Ale dla C/C++, generale Dodatkowe Dołącz katalogi obejmują „obejmują” folder z zainstalowanym łącznikiem, nie zainstalować serwer folder

-Podczas wykonywania powyższego, dołącz także folder doładowania, patrz uwaga 2 poniżej:

-I dla linkera, etc .. generalnego używać folder rezygnacji ze złącza/lib/opt

* [uwaga 2] * Druga to musi się zdarzyć, trzeba to od wariantu biblioteki Boost .hpp, robi się to tak samo jak wyżej, dodaj główny folder, który wyodrębniono z pobierania doładowania, nie zwiększaj lub lib, lub podfolderu "wariantu" znalezionego w boostmainfolder/boost. Tylko główny folder jako drugi zawiera

Następny:

Jaki jest następny myślę jest statyczna budowy, dobrze go i tak to zrobiłem. Podążaj za tym.

Następnie skompiluj/skompiluj. Pojawiają się błędy LNK (Edit: Gone po zmianie ide do visual studio 2008).Myślę, że to dlatego, że sam powinienem budować złącze (jeśli zrobisz to w visual studio 2010, wtedy błędy łącza powinny zniknąć), ale pracujesz nad tym, żeby to działało od czwartku, zobaczę, czy mam motywację, aby to zobaczyć poprzez po dobrze przespanej nocy (a zrobiłem i skończyłem :)).

7

Wreszcie mogłem skutecznie skompilować program ze złączem C++ w Ubuntu 12.04 Mam zainstalowaną wtyczkę poleceniem

'apt-get install libmysqlcppconn-dev' 

Początkowo z „nieokreślonej odniesieniu do` get_driver_instance”” I wobec tego samego problemu do rozwiązania ogłaszam moją zmienną instancji sterownika typu MySQL_Driver. Dla gotowego odniesienia ten typ jest zdefiniowany w pliku mysql_driver.h. Oto fragment kodu użyty w moim programie.

sql::mysql::MySQL_Driver *driver; 
try {  
    driver = sql::mysql::get_driver_instance(); 
} 

i skompilowany program z opcją -l mysqlcppconn łącznikowej

i nie zapomnij podać ten nagłówek

#include "mysql_driver.h" 
2

musiałem to -lmysqlcppconn do mojego wzniesionego w celu zmusić go do działania.

Powiązane problemy