Платформы корпоративных информационных систем


С и C++


Глава №13.
Глава №13. С и C++ В этой книге мы рассматриваем несколько разных языков программирования: Python, Java, Perl и С. Из этих языков больше всего трудностей вызывают C/C++. В других языках ваш...
Два API
Два API Используете ли вы С или C++, С API для MySQL и mSQL являются шлюзами к базе данных. Однако их применение может очень различаться в зависимости от того, используете ли вы С или объектн...
Таблица 13-1. С API для MySQL и mSQL
Таблица 13-1. С API для MySQL и mSQL...
MySQL
MySQL...
MSQL
mSQL mysql_affected_rows() CM. msqlQuery() mysql_close() msqlClose()...
Пример 13-1. Простая программа, извлекающая все данные из тестовой базы и отображающая их
Пример 13-1. Простая программа, извлекающая все данные из тестовой базы и отображающая их #include <sys/time. h> #include <stdio.h> #include <mysql.h> int main(char **args...
Объектно-ориентированный доступ к базам данных на C++
Объектно-ориентированный доступ к базам данных на C++ С API прекрасно работают в процедурном программировании на С. Однако они не очень хорошо вписываются в объектно-ориентированную среду C++....
/B>. Библиотека объектно-ориенитрованного доступа к базе данных
Рисунок 13-1. Библиотека объектно-ориенитрованного доступа к базе данных Поскольку мы занимаемся освещением доступа к базам данных MySQL и mSQL, то сосредоточимся на специфичных для MySQL и mS...
Соединение с базой данных
Соединение с базой данных В любой среде доступ к базе данных начинается с соединения. Как вы видели в первых двух примерах, MySQL и mSQL по-разному представляют одно и то же понятие - соединен...
Пример 13-3. Заголовок класса Connection
Пример 13-3. Заголовок класса Connection #ifndef l_connection_h #define l_connection_h #include <sys/time.h> #if defined(HAS_MSQL) #include <msql. h> #lelif defined(HAS_MYSQL) #i...
Установление соединения с базой данных
Установление соединения с базой данных Всем приложениям, которые мы будем создавать с использованием этого API, для соединения с базой данных потребуется только создать новый экземпляр класса...
Пример 13-4. Соединение с MySQL и mSQL в классе Connection
Пример 13-4. Соединение с MySQL и mSQL в классе Connection #include "connection.h" Connection::Connection(char *host, char *db) { #if defined(HAS_MSQL) connection = -1; #elif defin...
Отсоединение от базы данных
Отсоединение от базы данных Другой логической функцией класса Connection является отсоединение от базы данных и освобождение скрытых от приложения ресурсов. Эту функцию осуществляет метод Clos...
Пример 13-5. Освобождение ресурсов базы данных
Пример 13-5. Освобождение ресурсов базы данных Connection::"Connection() { if( IsConnected() ) { Close(); } } void Connection::Close() { if( !IsConnected() ) { return; } #if defin...
Выполнение обращений к базе данных
Выполнение обращений к базе данных В промежутке между открытием соединения и закрытием базе данных обычно посылаются команды. Класс Connection делает это с помощью метода Query(), принимающего...
Пример 13-6. Обработка запроса к базе данных
Пример 13-6. Обработка запроса к базе данных Result "Connection::Query(char *sql) { T_RESULT *res; int state; // Если нет соединения, делать нечего if( !lsConnected(-) ) { throw "...
Другие методы класса Connection
Другие методы класса Connection По всему классу Connection разбросаны два вспомогательных метода, IsConnected() и GetError(). Проверить состояния соединения просто — достаточно посмотреть знач...
Пример 13-7. Чтение сообщений об ошибках и другие вспомогательные задачи класса Connection
Пример 13-7. Чтение сообщений об ошибках и другие вспомогательные задачи класса Connection int Connection::GetAffectedRows() { return affected_rows; } char 'Connection::GetError() { #if de...
Проблемы при обработке ошибок
Проблемы при обработке ошибок Хотя обрабатывать ошибки, как это описано выше, несложно благодаря инкапсуляции обработки в простой вызов API в классе Connection , следует остерегаться некоторых...
Результирующие наборы
Результирующие наборы Класс Result абстрагируется от понятий результатов MySQL и mSQL. Он должен обеспечивать доступ как к данным результирующего набора, так и к сопутствующим этому набору мет...
Пример 13-8. Интерфейс класса Result в result.h
Пример 13-8. Интерфейс класса Result в result.h #ifndef 1_result_h #define 1_result_h #include <sys/time.h> #if defined(HASJSQL) #include <msq1.h> #elif defined(HAS_MYSQl) #incl...
Перемещение по результатам
Перемещение по результатам Наш класс Result позволяет работать с результирующим набором построчно. Получив экземпляр класса Result в результате обращения к методу Query() , приложение должно п...
Пример 13-9. Перемещение по результирующему набору
Пример 13-9. Перемещение по результирующему набору int Result::Next() { T_ROW row; if( result == (T_RESULT *)NULL ) { throw "Результирующий набор закрыт."; } #if defined(HAS_MSQ...
Освобождение ресурсов и подсчет строк
Освобождение ресурсов и подсчет строк Приложения баз данных должны освобождать после себя ресурсы. Обсуждая класс Connection, мы отметили, как результирующие наборы, порождаемые запросом, поме...
Пример 13-10. Освобождение ресурсов и подсчет числа строк
Пример 13-10. Освобождение ресурсов и подсчет числа строк void Result::Close() { if( result == (T_RESULT *)NULL ) { return; } #if defined(HAS_MSQL) msqlFreeResult(result); #elif defined(HA...
Строки
Строки Отдельная строка результирующего набора представляется в нашей объектной модели классом Row. Класс Row позволяет приложению извлекать отдельные поля строки. В примере 13-11 показано объ...
Пример 13-11. Объявление класса Row в row.h
Пример 13-11. Объявление класса Row в row.h #ifndef l_row_h #define l_row_h #include <sys/types.h> #if defined(HAS_MSQL) #include <msql.h> #define T_RESULT m_result #define T_RO...
Пример 13-12. Реализация класса Row
Пример 13-12. Реализация класса Row #include <malloc.h> #include "row.h" Row::Row(T_RESULT *res, T_ROW row) { fields = row; result = res; } Row::"Row() { if( ! IsCl...








Начало