![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Unix C++ developer
Форумчанин
Регистрация: 16.04.2007
Сообщений: 651
|
![]()
Под впечатлением от этой статьи я решил написать свой небольшой мануал по работе с СУБД MySQL, используя библиотеку mysql++. Данная библиотека представляет собой кроссплатформенное решение, написанное на С++, предоставляет богатый набор классов и позволяет эффективные приложения. Т.к. моей основной операционной системой является Linux - я буду рассматривать процесс создания приложения под Unix платформу. Под платформу Windows все будет практически точно так же, за исключением собственно подключения библиотеки, ее заголовочных файлов к IDE (MS Visual studio, Dev-c++).
Для создания приложения в среде Unix наличие IDE, как и собственно графической оболочки не необходимо, процесс написания и компиляции может проходить в голой консоли. Для начала необходимо скачать саму библиотеку, это можно сделать по следующим ссылкам: Исходный код, для самостоятельной компиляции+документация Бинарные RPM сборки (следует попробовать разные версии, т.к. некоторые могут не установиться): RPM ver1 RPM ver2 RPM ver3 Версия для MS Visual C++ Я не буду описывать установку библиотеки для каждой платформы, т.к. это выходит за рамки данной статьи. Теперь пришло время познакомится с библиотекой, рассмотреть ее классы и создать простое приложение, которое будет подключаться к базе данных и запрашивать данные из таблицы, добавлять новые, модифицировать существующие записи. Для того, что бы воспользоваться возможностями библиотеки, следует подключить заголовочный файл mysql++.h и пространство имен mysqlpp. Код:
Класс имеет два конструктора: Connection(bool te=true) - создание экземпляра класса, без подключения к бд Connection (const char *db, const char *server=0, const char *user=0, const char *password=0, unsigned int port=0) - создание экземпляра класса с подключением к указанной бд по указанным параметрам. Думаю, что названия параметров говорят сами за себя и не требуют пояснений ![]() client_version() - возвращает строку типа string, содержащую версию библиотеки. connect (const char *db=0, const char *server=0, const char *user=0, const char *password=0, unsigned int port=0) - то же самое, что и описанный выше конструктор, применяется в случае использования конструктора Connection(true). connected() - возвращает true, в случае если выполнено подключение к базе и false, если подключение не выполнено. disconnect() - выполнить отключение от базы данных. error() - возвращает последнюю ошибку. query (const char *qstr=0) - возвращает объект типа query, позволяющий выполнить запрос (об этом ниже). count_rows (const std::string &table) - возвращает результат типа unsigned long, количество строк в указанной таблице table. Класс Connection имеет еще ряд методов, но они нам пока не интересны. Теперь рассмотрим класс query. В нем нас интересуют следующие методы: store() - возвращает результат запроса, типа StoreQueryResult. execute() - выполнить запрос, не требующий возвращения данных, метод возвращает результат SimpleResult. Класс StoreQueryResult - именно он позволяет обратиться к запрошенной таблице, представленной как двумерный массив, получить количество вовращенных строк. num_rows() - возвращает количество строк empty() - возвращает true, в случае, если запрос ничего не вернул и false, если запрос вернул данные. Класс SimpleResult, у этого класса нас может интересовать всего один единственный метод ![]() rows() - возвращает количество строк, подвергшися изменению, во время вызова execute() Вот теперь мы точно готовы к тому, что бы написать наше первое простейшее приложение ![]() Последний раз редактировалось oleg kutkov; 31.07.2009 в 20:43. |
![]() |
![]() |
![]() |
#2 |
Unix C++ developer
Форумчанин
Регистрация: 16.04.2007
Сообщений: 651
|
![]()
Данное приложения представляет собой очень простой и детально расписанный пример, который поможет разобраться новичкам.
Код:
(так же у класса ConnectionFailed есть метод errnum (), возвращающий номер ошибки). После успешного подключения, проверяем еще раз, подключены ли мы, т.к. в случае нестабильной связи или по иным причинам - соединение может успеть отвалиться. В случае успешной проверки связи, инициализируем строку запроса querystring, наш запрос имеет вид: "SELECT * FROM Datatable", что означает вернуть все абсолютно все записи из некой таблицы Datatable. После этого вызываем метод query, класса соединения, и у возвращенного объекта, вызываем метод store(), возвращенный результат запроса сохраняем в queryres. Далее проверяем, не пуст ли результат. Если нет - построчно выводим записи на экран. В классе StoreQueryResult, экземпляром которого является queryres, строки хранятся в виде двумерного ассоциативного массива, это дает возможность обратиться к соотвествующему столбцу по его имени. Как в данном случае: queryres[rc]["colname_sec"] - обращаемся к rc-ой строке и столбцу под названием colname_one. После окончания работы с бд следует обязательно закрыт соединение, что мы и делаем вызывая метод disconnect(). Далее будет описано как добавлять и удалять строки в таблице. Последний раз редактировалось oleg kutkov; 31.07.2009 в 20:44. |
![]() |
![]() |
![]() |
#3 |
Unix C++ developer
Форумчанин
Регистрация: 16.04.2007
Сообщений: 651
|
![]()
В предидущем примере мы научились получать интересующие нас записи, теперь мы научимся добавлять и удалять их.
Я не буду повторять код всей программы, а просто лишь опишу способы, с помощью которых достигается нужный нам результат. В примере ниже показано, как можно добавить строку в нашу таблицу Datatable. SQL запрос в данном случае выглядит как INSERT INTO Datatable(colname_one, colname_sec) VALUES('data1', 'data2'). А для выполнения этого запроса будем использовать метод execute(). Код:
Все прочие операции, модификация, удаление строк выполняются аналогично, отличия будут только в самом тексте SQL запроса: Модификация: Код:
Код:
|
![]() |
![]() |
![]() |
#4 |
Unix C++ developer
Форумчанин
Регистрация: 16.04.2007
Сообщений: 651
|
![]()
Случается, что запросы могут некорректно работать с кириллическими символами, для устранения этой возмутительной ошибки следует выполнить особый запрос:
Код:
Для компиляции программы следуюет выполнить команду: Код:
Заключение. Выше были описаны примеры, позволяющие взаимодействовать с базой данных MySQL на различных платформах. Были затронуты лишь общие методы работы с библиотекой mysql++, список же классов и их методов намного обширнее, полностью ознакомится с ними можно на этой странице. А здесь доступна полная документация, на английском языке, с различными примерами. Последний раз редактировалось oleg kutkov; 01.08.2009 в 02:33. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 184
|
![]()
Вопрос вот в чём ! на мои запроси он возврашает мне строки типа char а нелзя сделат так что бы он мне wchar_t возвращал?
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
![]()
при компиляции возникли ошибки:
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\eh.h(61) : error C2039: MysqlNull:: is not a member of "vc_attributes::Pre" c:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourcea nnotations.h(71): see declaration of 'vc_attributes::Pre' и так далее |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с MySQL в C++ | psycho-coder | C/C++ Базы данных | 121 | 07.12.2015 13:39 |
Голосование с использованием MySQL | veter_s_morya | PHP | 12 | 15.02.2009 10:02 |
Работа с MySQL | igroman | PHP | 10 | 29.09.2008 16:15 |
MySQL нужна библ. для Visual C++ (MySql++) | Alexoid | Visual C++ | 8 | 07.05.2008 18:29 |
Работа с MySql | zetrix | PHP | 1 | 18.06.2007 15:02 |