Форум: Форум C++Разное
Новые темы: 00
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Взаимодействие из C++ программы с MySQL
 
 автор: in_mysql   (30.12.2006 в 16:07)
 
 

Приведите плиз небольшой примерчик, как взаимодействовать с MySQL из C++ программы? Например, как вывести версию MySQL, что-то ничего не выходит...

  Ответить  
 
 автор: ddhvvn   (30.12.2006 в 17:26)   письмо автору
 
   для: in_mysql   (30.12.2006 в 16:07)
 

Тоже хотел задать этот вопрос в ближайшее время, но уже опередил in_mysql. Так что мы оба ждем ответа

  Ответить  
 
 автор: Krasnodar   (31.12.2006 в 02:18)   письмо автору
 
   для: ddhvvn   (30.12.2006 в 17:26)
 

вот пример соединения с базой
 #include <my_global.h>
#include <mysql.h>

int main(int argc, char *argv[])
{
  // Дескриптор соединения
  MYSQL *conn;
  // Получаем дескриптор соединения
  conn = mysql_init(NULL);
  if(conn == NULL)
  {
    // Если дескриптор не получен - выводим сообщение об ошибке
    fprintf(stderr, "Error: can't create MySQL-descriptor\n");
    exit(1);
  }
  // Подключаемся к серверу
  if(!mysql_real_connect(conn,
                        NULL,
                        "root",
                        NULL,
                        NULL,
                        NULL,
                        NULL,
                        0
                        ))
  {
    // Если нет возможности установить соединение с сервером 
    // базы данных выводим сообщение об ошибке
    fprintf(stderr, 
            "Error: can't connect to database %s\n"
,
            mysql_error(conn));
  }
  else
  {
    // Если соединение успешно установлено выводим фразу - "Success!"
    fprintf(stdout, "Success!\n");
  } 
  // Закрываем соединение с сервером базы данных
  mysql_close(conn);
}
 

  Ответить  
 
 автор: Krasnodar   (31.12.2006 в 02:22)   письмо автору
 
   для: ddhvvn   (30.12.2006 в 17:26)
 

вот "извлечение версии MySQL-сервера"

 // Заголовочные файлы
#include <my_global.h>
#include <mysql.h>

// Прототип функции обработки ошибок
void puterror(char *);

// Главная функция программы1
int main(int argc, char *argv[])
{
  // Дескриптор соединения
  MYSQL conn;
  // Дескриптор результирующей таблицы
  MYSQL_RES *res;
  // Массив полей текущей строки
  MYSQL_ROW row;

  // Получаем дескриптор соединения
  if(!mysql_init(&conn))
     puterror("Error: can't create MySQL-descriptor\n");

  // Устанавливаем соединение с базой данных
  if(!mysql_real_connect(&conn,
                         "localhost",
                         "root",
                         "",
                         "shop",
                         0,
                         NULL,
                         0))
     puterror("Error: can't connect to MySQL server\n"
);

  // Выполняем SQL-запрос
  if(mysql_query(&conn, "SELECT VERSION()") != 0)
     puterror("Error: can't execute SQL-query\n");

  // Получаем дескриптор результирующей таблицы
  res = mysql_store_result(&conn);
  if(res == NULL)
  {
    puterror("Error: can't get the result description\n"
);
  }

  // Получаем первую строку из результирующей таблицы
  row = mysql_fetch_row(res);
  if(mysql_errno(&conn) > 0) puterror("Error: can't fetch result\n");

  // Выводим результат в стандартный поток
  fprintf(stdout, "Version: %s\n", row[0]);

  // Освобождаем память, занятую результирующей таблицей
  mysql_free_result(res);

  // Закрываем соединение с сервером базы данных
  mysql_close(&conn);
}

void puterror(char * str)
{
  fprintf(stderr, str);
  exit(1);
}
 

  Ответить  
 
 автор: ddhvvn   (31.12.2006 в 11:39)   письмо автору
 
   для: Krasnodar   (31.12.2006 в 02:22)
 

А, собственно, где взять этот mysql.h

  Ответить  
 
 автор: cheops   (31.12.2006 в 13:02)   письмо автору
 
   для: ddhvvn   (31.12.2006 в 11:39)
 

mysql.h находится в дистрибутиве MySQL в директории include, кроме того, для клиентской программы потребуется библиотека libmySQL.dll, libmySQL.lib - отладочный и оптмизированный вариант которой можно найти в директории lib дистрибутива.

  Ответить  
 
 автор: ddhvvn   (31.12.2006 в 13:02)   письмо автору
 
   для: cheops   (31.12.2006 в 13:02)
 

Ясно. Спасибо!

  Ответить  
 
 автор: sidpr   (01.01.2007 в 18:08)   письмо автору
 
   для: ddhvvn   (31.12.2006 в 13:02)
 

Поздравляю весь коллектив softtime с Новым 2007 годом за прошлый год вы многим помогли и надеюсь в новом году поможете еще большему кол-ву людей нуждающихся в вашей помощи!

По поводу C++ и Mysql не подкините примерчик обычный как извлекать данные с помощью C++ из таблиц Mysql так и записывать?

  Ответить  
 
 автор: cheops   (02.01.2007 в 14:44)   письмо автору
 
   для: sidpr   (01.01.2007 в 18:08)
 

Записывать данные можно при помощи программы
// Заголовочные файлы
#include <my_global.h>
#include <mysql.h>
#include <errmsg.h>
#include <mysqld_error.h>
int main(int argc, char *argv[])
{
  // Дескриптор соединения
  MYSQL conn;

  // Получаем дескриптор соединения
  if(!mysql_init(&conn))
  {
    // Если дескриптор не получен - выводим сообщение об ошибке
    fprintf(stderr, "Error: can't create MySQL-descriptor\n");
    exit(1);
  } 
  // Устанавливаем соединение с базой данных
  if(!mysql_real_connect(&conn,
                         "localhost",
                         "root",
                         "",
                         "shop",
                         0,
                         NULL,
                         0))
  {
    // Если соединение не установлено выводим сообщение об ошибке
    fprintf(stderr, "Error: %s\n"mysql_error(&conn));
    exit(1);
  }
  // Устанавливаем кодировку соединения, чтобы предотвратить
  // искажения русского текста
  if(mysql_query(&conn, "SET NAMES 'cp1251'") != 0)
  {
    // Если кодировку установить невозможно - выводим 
    // сообщение об ошибке
    fprintf(stderr, "Error: can't set character set\n"
);
    exit(1);
  }
  // Добавляем новый раздел - "Накопители"
  if(mysql_query(&conn, 
              "INSERT INTO catalogs VALUES (NULL,'Накопители')") != 0)
  {
    // Если добавить запись не получилось - выводим 
    // сообщение об ошибке
    fprintf(stderr, "Error: can't execute INSERT-query\n");
    exit(1);
  }

  // Закрываем соединение с сервером базы данных
  mysql_close(&conn);
}

  Ответить  
 
 автор: cheops   (02.01.2007 в 14:45)   письмо автору
 
   для: sidpr   (01.01.2007 в 18:08)
 

Извлечь информацию можно при помощи кода
// Заголовочные файлы
#include <my_global.h>
#include <mysql.h>
// Вспомогательная функция для вывода ошибок
void puterror(char *);

// Главная функция программы1
int main(int argc, char *argv[])
{
  // Дескриптор соединения
  MYSQL conn;
  // Дескриптор результирующей таблицы
  MYSQL_RES *res;
  // Дескриптор строки
  MYSQL_ROW row;

  // Получаем дескриптор соединения
  if(!mysql_init(&conn))
     puterror("Error: can't create MySQL-descriptor\n");

  // Устанавливаем соединение с базой данных
  if(!mysql_real_connect(&conn,
                         "localhost",
                         "root",
                         "",
                         "shop",
                         0,
                         NULL,
                         0))
     puterror("Error: can't connect to MySQL server\n"
);

  // Устанавливаем кодировку соединения, чтобы предотвратить
  // искажения русского текста
  if(mysql_query(&conn, "SET NAMES 'utf8'") != 0)
     puterror("Error: can't set character set\n");

  // Выполняем SQL-запрос
  if(mysql_query(&conn, "SELECT * FROM catalogs") != 0)
     puterror("Error: can't execute SQL-query\n"
);

  // Получаем дескриптор результирующей таблицы
  res = mysql_store_result(&conn);
  if(res == NULL) puterror("Error: can't get the result description\n");

  // Если имеется хотя бы одна запись - выводим
  // список каталогов
  if(mysql_num_rows(res) > 0)
  {
    // В цикле перебираем все записи
    // результирующей таблицы
    while((row = mysql_fetch_row(res)) != NULL)
    {
      // Выводим результат в стандартный поток
      fprintf(stdout, "%s\n", row[1]);
    }
  }

  // Освобождаем память, занятую результирующей таблицей
  mysql_free_result(res);

  // Закрываем соединение с сервером базы данных
  mysql_close(&conn);
}

void puterror(char * str)
{
  fprintf(stderr, str);
  exit(1);
}

  Ответить  
 
 автор: bronenos   (29.01.2007 в 11:44)   письмо автору
 
   для: cheops   (02.01.2007 в 14:45)
 

Никто не может сюда кинуть mysql.h и в общем файлы для работы с MySQL?
У меня нету их...

  Ответить  
 
 автор: cheops   (29.01.2007 в 13:12)   письмо автору
 
   для: bronenos   (29.01.2007 в 11:44)
 

Они входят в состав дистрибутива MySQL, если нет заголовочных файлов, нет и библиотек, нужно просто при установке выбрать режим Custom и отметить галку Developer Components или выбрать режим Complete (полная установка). Скорее всего компонентов разработчика в версии Essential не будет - необходимо использовать полную версию.

  Ответить  
 
 автор: Krasnodar   (29.01.2007 в 18:15)   письмо автору
9.1 Кб
 
   для: cheops   (29.01.2007 в 13:12)
 

Bronenos, прикрепил....

  Ответить  
 
 автор: 63ru   (30.11.2008 в 12:06)   письмо автору
 
   для: Krasnodar   (31.12.2006 в 02:22)
 

Использую Dev-C++ при компеляции выдает:

c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x10d):mysqll.cpp: undefined reference to `mysql_init'
c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x14c):mysqll.cpp: undefined reference to `mysql_real_connect'
c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x179):mysqll.cpp: undefined reference to `mysql_query'
c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x1a1):mysqll.cpp: undefined reference to `mysql_store_result'
c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x1d4):mysqll.cpp: undefined reference to `mysql_fetch_row'
c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x1ee):mysqll.cpp: undefined reference to `mysql_errno'
c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x238):mysqll.cpp: undefined reference to `mysql_free_result'
c:\documents and settings\Администратор\Мои документы\c++\mysqll.o(.text+0x24a):mysqll.cpp: undefined reference to `mysql_close'

файлы mysql.h и др. лежат с проектом и в папке include

подскажите что нужно сделать. На С++ тоько начинаю.

  Ответить  
 
 автор: exp   (30.11.2008 в 16:11)   письмо автору
 
   для: 63ru   (30.11.2008 в 12:06)
 

Вы устанавливали libmysql из меню сервис->Проверка обновлений ?

попробовал оттуда , произошла какая-то ошибка, зашёл на devpaks.org, нашёл ссылку
http://prdownloads.sourceforge.net/devpaks/libmysql-5.0.5-1sid.DevPak
~2.3M весом.
Пытается отобразиться как text/html страничкой в вашем браузере, и нужно не кликать по ссылке , а сохранять обьект , юзая контекстное меню ссылки

Установил PackageManager'ом, напихало кучу файлов в bin lib include, examples, docs ... работает
,только пример из папки Dev-Cpp/Examples
слегка отличается

#include <windows.h>
#include <iostream>
#include <mysql/mysql.h>

using namespace std;

int main()
{
    //connection params
    char *host = "localhost";
    char *user = "root";
    char *pass = "";
    char *db = "";

    //sock
    MYSQL *sock;
    sock = mysql_init(0);
    if (sock) cout << "sock handle ok!" << endl;
    else {
         cout << "sock handle failed!" << mysql_error(sock) << endl;
    }

    //connection
    if (mysql_real_connect(sock, host, user, pass, db, 0, NULL, 0))
         cout << "connection ok!" << endl;
    else {
         cout << "connection fail: " << mysql_error(sock) << endl;
    }
    
    //connection character set
    cout << "connection character set: " << mysql_character_set_name(sock) << endl;
    //wait for posibility to check system/mysql sockets
    system("PAUSE");
    
    //closing connection
    mysql_close(sock);
    return EXIT_SUCCESS;
}

  Ответить  
 
 автор: ktotamcamoetakoe   (10.08.2009 в 20:52)
 
   для: Krasnodar   (31.12.2006 в 02:22)
 

А как сделать так, чтобы разные запросы находились в разных функциях?
например,

int main()
int connect_to_db() - функция соединения с БД
int get_items() - выборка записей из БД

  Ответить  
 
 автор: vvs   (20.01.2008 в 03:57)   письмо автору
 
   для: in_mysql   (30.12.2006 в 16:07)
 

Неполучается у меня работать с mysql при компиляции первого привера выдаются следующие ошибки:
[Linker error] undefined reference to `mysql_init'
[Linker error] undefined reference to `mysql_real_connect'
[Linker error] undefined reference to `mysql_error'
[Linker error] undefined reference to `mysql_close'
ld returned 1 exit status
D:\Doc\VVS\Programing\c++\mysql\Makefile.win [Build Error] [Project1.exe] Error 1

Помогите пожалуйста, компилятор Dev-C++, ОС Windows

  Ответить  
 
 автор: ddhvvn   (23.02.2008 в 12:48)   письмо автору
 
   для: vvs   (20.01.2008 в 03:57)
 

хм... у меня не хочет в Builder 6 подключать эти mysql.h и my_global.h
в чем может быть проблема?

  Ответить  
 
 автор: cheops   (24.02.2008 в 05:44)   письмо автору
 
   для: ddhvvn   (23.02.2008 в 12:48)
 

Проект консольный или оконный?

  Ответить  
 
 автор: ddhvvn   (24.02.2008 в 10:38)   письмо автору
 
   для: cheops   (24.02.2008 в 05:44)
 

Оконный. В этом я уже разобрался (непрально объявлял)!

Теперь вылезают другие ошибки... там уже внутри кода...

В общем как связаться с mysql в оконном приложении в C++ Builder 6?

  Ответить  
 
 автор: cheops   (24.02.2008 в 11:08)   письмо автору
 
   для: ddhvvn   (24.02.2008 в 10:38)
 

В оконном варианте лучше использовать специализированные компоненты вроде dbExpress.

  Ответить  
 
 автор: O_o   (21.07.2010 в 09:34)
 
   для: vvs   (20.01.2008 в 03:57)
 

Проэкт -> Параметры проэкта -> Параметры -> Добавить библиотеку. Здесь находите libmysql.lib и должно все компилиться

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования