Topic : Connecting to mySQL Database
Author : Vic Cherubini
Page : 1

    
Purpose


By the end of this tutorial, you should know:

1. How to link the propery library files to compile your project in Visual C++ 6.0.
2. How to connect to a mySQL database.
3. How to retreive data from it.

Lets get started


In order to connect to a mySQL database in C/C++, you will have to download and compile the proper library files. These files are called mySQL++, and can be found here. Download the zip file and unzip it to a temporary folder. Open the lib folder and copy the file mysql++.lib to your compilers Lib or Library directory.

Create a new project in Visual C++ and press Ctrl+F7. Click the Link tab and type in mysql++.lib into the Library text-box.

Copy all of the .h files from the download into your compiler's Include directory.

Code


Ok, time for the best part, the code. The first lines of code are ones that you will see echoed throughout all of the tutorials. The 2 lines of code include the proper files in order to be able to compile the project. They are:
#include <stdio.h>
#include <mysql.h>

The several lines are used to #define the database details such as the host, the username, the password, and the database to connect to. Instead of creating 4 char pointers, I use 4 #define's like so:
#define host "localhost"
#define username "db_username"
#define password "db_password"
#define database "db"
You will have to change the values in the quotes to match the values that fit you. The next line creates a pointer of type MYSQL to the active database connection:
MYSQL *conn;
This program, being as simple as it is, will contain only one user defined function, main() and the rest of the functions used will be from the mySQL++ API (application program interface).

The next lines are ones that we all know and love:
int main()
{
Followed by that, we tell mySQL that are are about to connect with the mysql_init() function. We pass a value of NULL to it because for our purposes, we don't need to go into it any further:
conn = mysql_init(NULL);
The next step is to actually connect to the database. This is where the conn variable and the host, username, password, and database #define's are used:
mysql_real_connect(conn,host,username,password,database,0,NULL,0);
The next 3 lines are code that define variables to get a result and row pointer from the database, along with a variable to increment in the loop if there is more than one row returned by the query:
MYSQL_RES *res_set;
MYSQL_ROW row;
unsigned int i;


Finally, we query the database with the following query using the mysql_query() function: "SELECT * FROM users" like so:
mysql_query(conn,"SELECT * FROM users WHERE userid=1");
After querying the result, we need to store the result data in the variable res_set we defined earlier. This is done like so:
res_set = mysql_store_result(conn);
In our example, there will most likely be more than one row returned (i.e., if there are more than one user in the users table of the database). If so, then you need to find how many rows are returned so that you can loop through each one and print the result of each one like so:
unsigned int numrows = mysql_num_rows(res_set);
Finally, we retrive the result using the function mysql_fetch_row() and then print out all of the data in large chunks. This is done like so:
while ((row = mysql_fetch_row(res_set)) != NULL)
{

However, looping through the number of rows returned is useless if you don't find the number of fields in each row (in this case, they are all the same because the query comes from the same table, but, if the query were produced on the fly [in the while loop], then the function mysql_num_fields() is used to find the number of fields). I hope that makes sense. Here goes:
for (i=0; i<mysql_num_fields(res_set); i++)
{

And finally, after all this time, we print the stuff out using the plain old C standard function printf():
printf("%s\n",row[i] != NULL ? row[i] : "NULL");
   }
}

Last but certainly not least, we close our connection to the database. When there are multiple connects and many users accessing the database at the same time, it is essential that you connect and disconnect as soon as possible, or you can have disasterous results. The final lines of code disconnect from the database and then exit the main() function:
mysql_close(conn);
return 0;
}


Conclusion

Wow! That was pretty cool, huh? This code took me about an hour to whip up and even longer to write the tutorial (the color coding is the hardest part). I really hope that you learned something from this. I know the code could be made a lot better, and I will do that in the future, but hopefully it will be enough to teach you.

To compile the code, in Visual C++, you can press F7. If you have not already made a project, Visual C++ will ask you if you want to make one. Press Yes and continue on!

On the main page, you can download the code from this tutorial in the Downloads section. The file is named file.cpp.

As always, hope this helps.
-Vic
P.S. You can see the nice version of the tutorial at http://www.cnunited.com/3ddbr/tuts/lesson01.html.


Page : 1