- Качаем последнию версию 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;
}
Комментариев нет:
Отправить комментарий