


So stellen Sie eine Verbindung zur MySQL-Datenbank her und lesen Daten in C++
Jun 03, 2023 am 09:05 AM1. Die Header-Datei der MySQL-API muss enthalten sein
Wenn Sie eine Verbindung zur lokalen MySQL-Datenbank herstellen müssen, muss die MySQL-Datenbank lokal installiert sein. Hier werden einige MySQL-APIs verwendet, z. B. das Herstellen einer Verbindung zur Datenbank, das Ausführen von Abfrageanweisungen und andere Vorg?nge. Diese Schnittstellen sind in den folgenden Headerdateien enthalten:
#include <mysql/mysql.h>
2 Spezifische Schritte zum Herstellen einer Verbindung zu MySQL
Dies kann grob unterteilt werden Vier Hauptschritte:
1. Stellen Sie eine Verbindung zur MySQL-Datenbank her
Wenn Sie die Daten in MySQL-Daten abrufen m?chten, müssen Sie natürlich zuerst eine Verbindung zur Datenbank herstellen und ein Handle erhalten, das das bedienen kann Datenbank.
2. Führen Sie die Abfrageanweisung aus, dh w?hlen Sie die von uns ben?tigten Daten aus.
dient dazu, die Abfrageanweisung auszuführen und die von uns ben?tigten Daten abzufragen. Die abgefragten Daten werden an einem Ort gespeichert, der als Ergebnismenge bezeichnet wird.
3. Rufen Sie die erforderlichen Daten aus dem Ergebnissatz ab.
Verwenden Sie die entsprechenden Schnittstellenfunktionen, um die Daten jeder Zeile und jedes Felds im Ergebnissatz abzurufen.
4. Extrahieren Sie die Informationen jedes Felds in jeder Zeile aus dem Ergebnissatz. 5. Geben Sie Ressourcen frei, einschlie?lich des MySQL-Handles des Ergebnissatzes. Im Folgenden finden Sie eine detaillierte Erl?uterung mehrerer wichtiger Schnittstellenfunktionen, die verwendet werden müssen.
2.1 mysql_real_connect
Diese Funktion wird verwendet, um eine Verbindung zur Datenbank-Engine herzustellen, die auf dem Host ausgeführt wird. Wenn die Verbindung erfolgreich ist, wird ein Handle abgerufen, mit dem die Datenbank betrieben werden kann. Andernfalls wird ein NULL-Zeiger zurückgegeben.
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag )
Diese Funktion hat viele Parameter und die Bedeutung jedes Parameters ist wie folgt:
mysql: Es ist die Adresse der vorhandenen MYSQL-Struktur. Vor dem Aufruf von mysql_real_connect() muss mysql_init() aufgerufen werden, um die MYSQL-Struktur zu initialisieren.
host: ist der Hostname oder die IP-Adresse. Wenn ?host“ NULL oder die Zeichenfolge ?localhost“ ist, wird die Verbindung als Verbindung zu localhost behandelt.
Benutzer: Die MySQL-Anmelde-ID des Benutzers. Wenn ?user“ NULL oder die leere Zeichenfolge ?“ ist, wird der Benutzer als aktueller Benutzer betrachtet.
passwd: Passwort des Benutzers. Wenn ?passwd“ NULL ist, werden nur Eintr?ge in der Benutzertabelle des Benutzers (die ein leeres Passwortfeld haben) auf eine übereinstimmung überprüft.
db: ist der Datenbankname. Wenn db NULL ist, setzt die Verbindung die Standarddatenbank auf diesen Wert.
Port: Wenn ?Port“ nicht 0 ist, wird sein Wert als Portnummer für die TCP/IP-Verbindung verwendet. Beachten Sie, dass der Parameter ?host“ die Art der Verbindung bestimmt.
unix_socket: Wenn unix_socket nicht NULL ist, beschreibt diese Zeichenfolge den Socket oder die Named Pipe, die verwendet werden soll. Beachten Sie, dass der Parameter ?host“ die Art der Verbindung bestimmt.
client_flag: Der Wert ist normalerweise 0
2.2 mysql_query oder mysql_real_queryDiese Funktion wird verwendet, um einen Abfragebefehl an die Datenbank zu senden und ihn von der Datenbank ausführen zu lassen. Die Rückgabe von 0 zeigt an, dass die Abfrage erfolgreich war, andernfalls schl?gt sie fehl.
int mysql_query(MYSQL *mysql, const char *stmt_str)
oder:
int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)
MySQL: ist das MySQL-Operationshandle, das über erhalten wird.
- stmt_str: Gibt die Abfrageanweisung an, die ausgeführt werden muss.
- L?nge: ist die L?nge der Abfrageanweisung.
- Der Unterschied zwischen den beiden oben genannten Funktionen ist:
- mysql_query () kann nicht zum Ausführen von Bin?ranweisungen verwendet werden, dh der Parameter stmt_str darf keine Bin?rdaten enthalten und wird in Zeichen analysiert.
- mysql_query ist etwas langsamer, da die L?nge der Abfrageanweisung berechnet werden muss
- 2.3 Holen Sie sich die Ergebnismenge mysql_store_result
Diese Funktion gibt die Ergebnismenge zurück, wenn die Abfrage erfolgreich ist. Wenn sie fehlschl?gt, gibt sie NULL zurück
MYSQL_RES *mysql_store_result(MYSQL *mysql)
2.4 Zeigt den Ergebnissatz jeder Datenzeile an
Der Eingabeparameter dieser Funktion ist der in Schritt (3) zurückgegebene Ergebnissatz. Bei jedem Aufruf wird die n?chste Datenzeile in der Ergebnismenge zurückgegeben und der Zeiger um eine Zeile nach hinten verschoben. Wenn keine n?chste Datenzeile vorhanden ist, wird NULL zurückgegeben.
Sie k?nnen mysql_num_fields(result) verwenden, um die Anzahl der Zeilen in der Ergebnismenge zu berechnen, und mysql_num_fields(result), um die Anzahl der Spalten zu berechnen. Wenn Zeile die Informationen einer bestimmten Zeile sind, dann Zeile[0], Zeile[1]. . . Alle Feldinformationen der Zeile.MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)3. Ein ProgrammierbeispielDie Umgebung hier ist ein Linux-System. Der Name der verwendeten lokalen Datenbank lautet ?CrashCourse“ und der Name der Abfragetabelle lautet ?products“. Das folgende Programmierbeispiel zeigt die Abfrage aller Artikel mit einem Preis über 30 in der Produkttabelle. Der vollst?ndige Inhalt der Produkttabelle lautet wie folgt:
#include
#include <mysql/mysql.h>
#include
using namespace std;
MYSQL mysql; //mysql連接
MYSQL_RES* res; //結(jié)果集結(jié)構(gòu)體
MYSQL_ROW row; //char** 二維數(shù)組,存放記錄
int main()
{
// 步驟1: 初始化并連接數(shù)據(jù)庫(kù),獲得操作數(shù)據(jù)庫(kù)的句柄
mysql_init(&mysql); //初始化
if (!(mysql_real_connect(&mysql, "localhost", "root", "root", "CrashCourse", 0, NULL, 0))) {
cout << "Couldn't connect to Database!\n : " << mysql_error(&mysql);
exit(1);
}
else {
printf("Database connection succeeded. Connected...\n\n");
}
// 步驟2: 執(zhí)行查詢語(yǔ)句,查詢需要的數(shù)據(jù)(設(shè)置編碼格式也相當(dāng)于執(zhí)行特殊的查詢語(yǔ)句)
mysql_query(&mysql, "set names gbk"); // 設(shè)置編碼格式
mysql_query(&mysql, "SELECT * from products where prod_price > 30");
// 步驟3:獲取結(jié)果集
res = mysql_store_result(&mysql);
// 步驟4:顯示結(jié)果集中每行數(shù)據(jù)
int cols = mysql_num_fields(res); // 計(jì)算結(jié)果集中,列的個(gè)數(shù)
while (row = mysql_fetch_row(res)) {
for (int i = 0; i < cols; ++i) {
cout << row[i] << "\t";
}
cout << endl;
}
// 步驟5:釋放結(jié)果集合mysql句柄
mysql_free_result(res);
mysql_close(&mysql);
return 0;
}
Die Abfrageergebnisse lauten wie folgt:
Das obige ist der detaillierte Inhalt vonSo stellen Sie eine Verbindung zur MySQL-Datenbank her und lesen Daten in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Systemendianess kann durch eine Vielzahl von Methoden erkannt werden. Die am h?ufigsten verwendete Methode ist die Gewerkschafts- oder Zeigermethode. 1. Verwenden Sie eine Vereinigung: uint32_t 0x01020304 zuweisen, wenn das niedrigste Adress -Byte 0x04 ist, ist es ein kleiner Endian, und wenn es 0x01 ist, ist es ein gro?er Endianer; 2. Verwenden Sie Zeigerkonvertierung: uint16_t 0x0102 zuweisen, lesen Sie die Byte -Bestellung durch den uint8_t -Zeiger, [0] == 0x02 und [1] == 0x01 ist ein kleiner Endian, sonst ist es ein gro?er Endianer; 3.. Erkennung von Kompilierungszeit: Definieren Sie die Funktion von Contexpr, um festzustellen, ob die Variable (char) und die int int 1 sind, und kombinieren Sie IFConStExPR, um die Endian-Reihenfolge w?hrend der Zusammenstellungsperiode zu bestimmen. 4.. Laufzeit -Makrokapselung: Verwendung (char*) & amp

Die Antwort lautet: Verwenden Sie den STD :: String Constructor, um das Zeichen -Array in std :: string zu konvertieren. Wenn das Array das Zwischenprodukt '\ 0' enth?lt, muss die L?nge angegeben werden. 1. Für C-Stys, die mit '\ 0' enden, verwenden Sie std :: stringstr (chararray); Um die Konvertierung abzuschlie?en; 2. Wenn das char -Array die mittlere '\ 0' enth?lt, aber die ersten n Zeichen konvertieren muss, verwenden Sie std :: stringstr (Chararray, L?nge); die L?nge klar festlegen; 3. Wenn Sie ein Array mit fester Gr??e verarbeiten, stellen Sie sicher, dass es mit '\ 0' endet, und konvertieren Sie es dann. V.

Todebugac applicationuseusinggdbinvisualStudioCode, configurethelaunch.jsonfilecorctly; keysettingsincludeSpectheexexexablePathwithwith "Programm", "mimode" auf "GDB" und "Typ" zu "CPPDBG", unter Verwendung von "Ex."

Installieren Sie die Boost -Bibliothek, 2. Schreiben Sie Code für DNS -Aufl?sung mit Boost.asio, 3. Kompilieren und verknüpfen Sie die Boost_System -Bibliothek, 4. Führen Sie das Programm aus, um die von www.google.com analysierte IP -Adresse auszuführen. Dieses Beispiel zeigt, wie Boost.asio die Netzwerkprogrammierung in C vereinfacht, plattformübergreifende Synchron-Synchron-DNS-Abfragen über io_context und tcp :: resolver implattiert und unterstützt IPv4- und IPv6-Adressaufl?sung und druckt schlie?lich alle Ergebnisse.

Die h?ufigste Methode, um Vektorelemente in C zu finden, besteht darin, STD :: Find zu verwenden. 1. Verwenden Sie STD :: Finden Sie, um mit dem Iteratorbereich und dem Zielwert zu suchen. Durch den Vergleich, ob der zurückgegebene Iterator gleich End () ist, k?nnen wir beurteilen, ob er gefunden wird. 2. Für benutzerdefinierte Typen oder komplexe Bedingungen sollte std :: find_if verwendet werden und Pr?dikatfunktionen oder Lambda -Ausdrücke sollten übergeben werden. 3. Bei der Suche nach Standardtypen wie Zeichenfolgen k?nnen Sie die Zielzeichenfolge direkt übergeben. 4. Die Komplexit?t jeder Suche ist O (n), die für kleine Daten geeignet ist. Für h?ufige Suchanfragen sollten Sie in Betracht ziehen, std :: set oder std :: unconded_set zu verwenden. Diese Methode ist einfach, effektiv und weit verbreitet für verschiedene Suchszenarien.

STD :: Mutex wird verwendet, um gemeinsame Ressourcen zu schützen, um den Datenwettbewerb zu verhindern. Im Beispiel wird die automatische Verriegelung und Entsperrung von STD :: lock_guard verwendet, um die Sicherheit mit mehreren Threads zu gew?hrleisten. 1. Verwenden von std :: mutex und std :: lock_guard k?nnen die abnormalen Risiken vermeiden, die durch das manuelle Management von Schl?ssern eingeführt werden; 2. gemeinsame Variablen wie Z?hler müssen bei der Modifizierung von Multi-Threads mit Mutex geschützt werden. Das Lock-Management im Raiii-Stil wird empfohlen, um eine Ausnahmesicherheit zu gew?hrleisten. 4. Vermeiden Sie Deadlocks und mehrere Schl?sser in einer festen Reihenfolge; 5. Jedes Szenario des Multi-Thread-Zugriffs auf gemeinsame Ressourcen sollte die Mutex-Synchronisation verwenden, und das endgültige Programm gibt korrekt erwartet: 10000 und tats?chlich: 10000.

CheckCompatibilit?t mit Anwendungen und Featuren; 2.Backupalldata, Konfigurationen und Llogs; 3.ChooseUpgrademethod (Packagemanager, Mysqlinstaller, ormanual); 4.Runpost-upgradechecksandTests;

Zu den Kernmethoden zur Realisierung von MySQL -Datenblut -Bindungsverfolgung geh?ren: 1. Binlog, um die Daten?nderungsquelle aufzuzeichnen, Binlog zu aktivieren und zu analysieren und spezifische Gesch?ftsaktionen in Kombination mit dem Kontext der Anwendungsschicht zu verfolgen. 2. Injize Blood Bindes -Tags in den ETL -Prozess und zeichnen Sie die Zuordnungsbeziehung zwischen der Quelle und dem Ziel auf, wenn Sie das Tool synchronisieren. 3. Fügen Sie den Daten Kommentare und Metadaten -Tags hinzu, erkl?ren Sie die Feldquelle beim Erstellen der Tabelle und stellen Sie eine Verbindung zum Metadatenverwaltungssystem her, um eine visuelle Karte zu bilden. 4. Achten Sie auf die Hauptkonsistenz der Prim?rschlüssel, vermeiden Sie eine überm??ige Abh?ngigkeit von SQL -Analyse, ?nderungen des Versionskontrolldatenmodells und prüfen Sie regelm??ig die Daten von Blutbindungen, um eine genaue und zuverl?ssige Verfolgung von Blutkindern zu gew?hrleisten.
