- Качаем последнию версию MySQL Communication Server с сайта: http://www.mysql.com/
- Качаем MySQL GUI Tools Downloads для работы с БД через GUI. ( При установке MySQL выбираем расширенную установку и ставим галочки в нужном месте, для включения include и lib. )
- Ставим GUI Tools
- Проверяем что база работает, запустив GUI и сделав коннект к базе.
- Проверяем что созданы директории include и lib в папке куда установлен MySQL
- Необходимо прописать пути к директориям include и lib (Tools->Options->Projects and Solution->VC++ Directories)
- В опциях самого проекта-программы (Project->$Name Property->Configuration Properties->Linker->General) в поле Additional Library Directories прописываем путь к директории lib.
- Почти там же (Project->$Name Property->Configuration Properties->Linker->Input) в поле Additional Dependencies пишем libmysql.lib
Настройка minGW Dev++
- Вообщем почти также прописываем пути к include и lib в оболочке Dev++ (Параметры компилятора->Директории)
- Прописывем библиотеку libmysql.lib в параметрах проекта в разделе параметры->компоновщик.
- И если происходит ошибка: "SOCKET чего там не определен", то: Открываем mysql.h и ищем там строку #define my_socket SOCKET и правим так:
#ifdef __WIN__ #include <windows.h> #define my_socket UINT_PTR //#define my_socket SOCKET #else
windows.h здесь добавился чтобы определился UINT_PTR
Для Borland (сам не устанавливал, однако, пришлось вникать теоретически)
Вообщем аналогичные действия, однако, добавлется еще один момент.
Т.к. формат lib-ов в borland используется другой (а libmysql.lib сделан изначально под VC)
необходимо сделать libmysql.lib самомтоятельно, имея libmysql.dll и две утилиты из поставки борланда impdef.exe, implib.exe.
Технология должна быть примерно такой:
- С помощью impdef.exe вытаскиваем из dll - файл с описанием всех ф-ий, например что-то.def.
- Возможно придется поэкперементировать с редактированием файла: что-то.def (например с добавлением к именам ф-ий '_' или написания строк типа _функция@4=функция, другие варианты написания этого файла есть в инэнте.
- С помошью implib.exe и на основе что-то.def генерируем libmysql.lib
Теперь напишем пример на С++:
/* Name: Copyright: Author:Pingi-Pingi Date: Description: This Exemple show: connect, select data, and close MySQL DataBase. File mysql.h has been changed for normal compilation (Please see comments in mySQL.h from Pingi-Pingi) */ #include <cstdlib> #include <iostream> #include "mysql.h" //using namespace std; MYSQL mysql; MYSQL_ROW row; MYSQL_RES *res; int main(int argc, char *argv[]) { std::cout<<"Start"<<std::endl; MYSQL* mysql = mysql_init((MYSQL*) 0); mysql->free_me = 1; mysql->reconnect = 1; std::cout<<"Connect..."<<std::endl; if (!mysql_real_connect( mysql, "localhost","login","password",NULL, 3306, NULL, 0 )) { std::cout<<"Error code:"<<mysql_errno(mysql)<<" Error:"<<mysql_error(mysql)<<std::endl; mysql_close(mysql); return 0; } std::cout<<"Connected to Data Base!"<<std::endl; //Execute Query char *myqery="SELECT * FROM test.table"; if (mysql_query(mysql, myqery)) { std::cout<<myqery<<std::endl; std::cout<<"Error code:"<<mysql_errno(mysql)<<" Error:"<<mysql_error(mysql)<<std::endl; mysql_close(mysql) ; return 0; } MYSQL_RES* presults = mysql_store_result(mysql); if (presults) //???? ???? ?????? ? ??????? { MYSQL_ROW row; while ((row=mysql_fetch_row(presults))) { std::cout<<row[0]<<","<<row[1]<<","<<row[2]<<std::endl; } } mysql_close(mysql) ; system("PAUSE"); return EXIT_SUCCESS; }
Этот код реализует простые операции с БД, такие как:
connect, select data, and close.
Ниже, несколько расширенный пример, который умеет:
Открыть, Считать данные, Записать, Обновить, Закрыть БД
/* Name: Copyright: Author:Pingi-Pingi Date: Description: This Exemple show: connect, select data, and close MySQL DataBase. File mysql.h has been changed for normal compilation (Please see comments in mySQL.h) */ #include <cstdlib> #include <iostream> #include "mysql.h" //using namespace std; MYSQL mysql; MYSQL_ROW row; MYSQL_RES *res; int main(int argc, char *argv[]) { std::cout<<"Start"<<std::endl; //Коннектимся к БД MYSQL* mysql = mysql_init((MYSQL*) 0); mysql->free_me = 1; mysql->reconnect = 1; std::cout<<"Connect..."<<std::endl; if (!mysql_real_connect( mysql, "localhost","myName","myPass",NULL, 3306, NULL, 0 )) { std::cout<<"Error code:"<<mysql_errno(mysql)<<" Error:"<<mysql_error(mysql)<<std::endl; mysql_close(mysql); return 0; } std::cout<<"Connected to Data Base!"<<std::endl; //Чтение из БД std::cout<<"Read From DB..."<<std::endl; //Read From BD char *myqery="SELECT * FROM test.table"; if (mysql_query(mysql, myqery)) { std::cout<<myqery<<std::endl; std::cout<<"Error code:"<<mysql_errno(mysql)<<"Error:"<<mysql_error(mysql)<<std::endl; mysql_close(mysql); return 0; } //Выдаем все что получили на экран MYSQL_RES* presults = mysql_store_result(mysql); if (presults) { MYSQL_ROW row; while ((row=mysql_fetch_row(presults))) { std::cout<<row[0]<<","<<row[1]<<","<<row[2]<<std::endl; } } mysql_free_result(presults); /* освободили */ std::cout<<"Read From DB...Done"<<std::endl; //Вставка в таблицу строки std::cout<<"Insert to DB..."<<std::endl; char *myqery_insert="INSERT INTO test.table(code,description) VALUES ('122345','This Description')"; if (mysql_query(mysql, myqery_insert)) { std::cout<<myqery<<std::endl; std::cout<<"Error code:"<<mysql_errno(mysql)<<"Error:"<<mysql_error(mysql)<<std::endl; mysql_close(mysql); return 0; } std::cout<<"Insert to DB...Done"<<std::endl; //Обновление полей std::cout<<"Update DB..."<<std::endl; char *myqery_update="UPDATE test.table SET code='5555', description='This Update Description' where id='3'"; if (mysql_query(mysql, myqery_update)) { std::cout<<myqery<<std::endl; std::cout<<"Error code:"<<mysql_errno(mysql)<<"Error:"<<mysql_error(mysql)<<std::endl; mysql_close(mysql); return 0; } std::cout<<"Update DB...Done"<<std::endl; mysql_close(mysql); system("PAUSE"); return EXIT_SUCCESS; }
Комментариев нет:
Отправить комментарий