MySQL & mSQL

         

MSQLCAPI


API для языка С в mSQL версии 2 не имеет принципиальных отличий от реализации в mSQL 1. Однако были добавлены некоторые новые функции, и было внесено несколько изменений в уже существующие функции. Если функция может быть использована только в mSQL 2, на это обращается особое внимание.

Типы данных

mSQL С API кроме стандартных типов данных языка С использует некоторые свои типы. Они определены в заголовочном файле 'msql.h', который необходимо подключать при компиляции всех программ, использующих библиотеку mSQL.

m_result

Структура, содержащая результаты оператора SELECT (или SHOW). Доступ к результатам запроса следует осуществлять через элемент этой структуры m_row.

m_row

Одна запись из данных, возвращаемых запросом SELECT. Результаты всех типов данных mSQL хранятся в этом типе (как массив символьных строк).

m_field

Структура, содержащая всю информацию, которая касается отдельного поля таблицы. Элементы структуры m_field могут быть проверены напрямую и имеют следующее строение:

char *name

Имя поля.

char *table

Имя таблицы, содержащей поле. Это значение пустое (null), если результирующий набор не относится к настоящей таблице.

int type

Тип поля. Является целым числом, соответствующим типам данных mSQL SQL, определенным в заголовочном файле msql.h.

int length



Длина поля в байтах.

int flags

Ноль или более флагов. Доступ к флагам осуществляется- через следующие макросы:

IS_PRI_KEY(flags)

Возвращает true, если поле является первичным ключом.

IS_NOT_NULL(flags)

Возвращает true, если поле определено как NOT NULL.

msqIConnect

int msqIConnect ( char*host )

Создает подключение к серверу mSQL с указанным именем хоста или IP-адресом. Если в аргументе передать пустое значение, будет создано подключение к серверу mSQL на локальном хосте, с использованием сокетов Unix. Функция возвращает описатель базы данных, применяемый для связи с сервером баз данных. В случае ошибки вернется — 1.

Пример

/* Создать подключение к серверу баз данных на локальном хосте*/


dbh = msqlConnect( (char*)NULL );

if (dbh == -1) {

print " Ошибка при подключении!\n";

exit(1); }

msqISelectDB

int msqISelectDB ( int sock , char*dbName )

Выбирает базу данных для указанного подключения. Базу данных необходимо выбрать до того, как будут посланы любые запросы к серверу баз данных. В случае ошибки возвращается — 1.

Пример

/* Выбрать базу данных "mydatabase" */

result = msqlSelectDB( dbh, "mydatabase" );

if (result == -1) {

print "Ошибка при выборе базы данных! \n";

exit(1); }

msqIQuery

int msqlQuery( int sock , char*query )

Выполняет указанный SQL-запрос. В mSQL 2 в возвращаемом значении содержится количество записей, измененных запросом (или выбранных запросом SELECT). В mSQL 1 при успешном выполнении возвращается ноль. В случае ошибки обе версии возвращают — 1.

Пример

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

msqIStoreResult

m_result *msqlStoreResult()

Сохраняет результат запроса SELECT. Эту функцию вызывают сразу после вызова msqIQuery с запросом SELECT. Результаты запроса сохраняются в структуре m_result. Новые запросы посылаются серверу баз данных только после вызова этой функции. Каждая структура m_result должна быть освобождена с помощью msqlFreeResult по завершении работы с ней.

Пример

m_result *results;

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult();

IK. 897

/* К данным из этого запроса можно обращаться через'results'. Теперь можно выполнять новые запросы */

msqIFreeResult

void msqIFreeResult ( m_result*result )

Освобождает память, связанную со структурой m_result.

Пример

m_result "results;

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult();

/* Выполнить работу */

msqIFreeResult(results);

msqIFetchRow

m_row msqIFetchRow ( m_result*result )

Выбирает одну запись из результирующего набора. Данные помещаются в структуру m_row, которая является массивом символьных строк. Каждый успешный вызов функции msqIFetchRow возвращает следующую запись до тех пор, пока не будет достигнут конец набора, тогда будет возвращено нулевое значение.



Пример

m_result *results;

m_row "row;

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult();

row = msqlFetchRow(results);

printf("Третье поле первой записи в таблице: %s\n", row[2]);

msqlDataSeek

void msqlDataSeek ( m_result* result, int pos )

Устанавливает курсор, указывающий функции msqIFetchRow, .какую строку выбирать при следующей операции. Установив курсор в позицию 0, вы переместите его в начало данных. Установив курсор в позицию после последней записи, вы поместите его в конец данных.

Пример

m_result *results;

m_row Vow;

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult();

row = msqlFetchRow(results);

/* Вернуться к исходной позиции */ msqlDataSeek(results, 0);

msqINumRows

int msqINumRows ( m_result*result )

Возвращает число строк в результирующем наборе.

Пример

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult(); rows = msqlNumRows(results);

msqIFetchField

m_field "msqIFetchField ( m_result*result )

Возвращает информацию о полях в результирующем наборе. Каждый успешный вызов функции msqIFetchField вернет структуру m_f ield для очередного поля, пока полей больше не останется, и тогда будет возвращено пустое значение.

Пример

m_field *field;

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult();

field = msqlFetchField(results);

/* 'field' теперь содержит информацию о первом поле

в результирующем наборе */

field = msqlFetchField(results);

/* 'field' теперь содержит информацию о втором поле в том же наборе записей */

msqlFieldSeek

void msqlFieldSeek ( m_result*result , int pos )

Устанавливает курсор, указывающий функции msqlFetchField какое поле выбирать в следующий раз. Установив курсор в позицию после последнего поля, вы, собственно, установите его просто после последнего поля.

Пример

m_result "results; m_field 'field;



rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult();

field = msqlFetchField(results);

/* Вернутся к исходной позиции */

msqlFieldSeek(results, .0);

msqlNumFields

int msqlNumFields ( m_result* result )

Возвращает число полей в результирующем наборе.

Пример

rows_returned = msqlQuery( dbh, "SELECT FROM people" );

results = msqlStoreResult();

fields = msqlNumFields(results);

msqICIose

int msqICIose ( int sock )

Закрывает подключение к серверу баз данных mSQL.

Пример

dbh = msqlConnect( (char')NULL );

/* Do work */

msqlClose(dbh);

msqIListDBs

m_result *msqlListDBs ( int sock )

Возвращает структуру m_result, содержащую имена всех баз данных, доступных на сервере баз данных. Как и все структуры m_result, значение, возвращаемое этой функцией, должно быть освобождено с помощью msqlFreeResult после завершения работы с ним.

Пример

databases = msqlListDBs(dbh);

/* 'databases' содержит теперь имена всех баз данных на сервере*/

msqIListTables

m_result *msqIListTables ( int sock )

Возвращает структуру m_result, содержащую имена всех таблиц текущей базы данных. Как и все структуры m_result, значение, возвращаемое этой функцией, должно быть освобождено с помощью msqlFreeResult после завершения работы с ним.

Пример

tables = msqlListTables(dbh);

/* 'tables' содержит теперь имена всех таблиц текущей базы данных*/

msqIListFields

m_result 'msqIListFields ( int sock , char*tableName )

Возвращает структуру m_result, содержащую имена всех полей в указанной таблице. Как и все структуры m_result, значение, возвращаемое этой функцией, должно быть освобождено с помощью msqlFreeResult после завершения работы с ним.

Пример

fields = msqlListFields(dbh, "people");

/* 'fields' содержит теперь имена всех полей

в таблице'people' */

msqIListlndex

m_result 'msqIListlndex ( int sock , char*tableName , char*index )

Возвращает структуру m_result, содержащую информацию о заданном индексе. Возвращаемый набор данных будет содержать тип индекса (в настоящее время поддерживается только тип 'avl') и содержащиеся в индексе имена полей. Как и все структуры m_result, значение, возвра щаемое этой функцией, должно быть освобождено с помощью msqlFreеResult после завершения работы с ним.

Пример

index = msqll_istIndex(dbh, "people", "idx1");

/* Теперь'index' содержит информацию об индексе 'idx1' в таблице 'people' */


Содержание раздела