Учебно-методические материалы для студентов кафедры АСОИУ

Основные средства доступа к серверам баз данных

Подключение к серверу БД

Клиент-серверные СУБД, как правило, представляют клиентам несколько разных способов подключения, среди которых именованные каналы, сокеты, сетевые порты. Последние являются основным способом взаимодействия приложения и сервера баз данных. Номера зарегистрированных портов для распространенных СУБД можно посмотреть в файле /etc/services (cat /etc/services | grep sql, листинг 1).

Листинг 1. Зарегистрированные порты клиент-серверных СУБД

sql*net 66/tcp # Oracle SQL*NET
sql*net 66/udp # Oracle SQL*NET
sqlserv 118/tcp # SQL Services
sqlserv 118/udp # SQL Services
sql-net 150/tcp # SQL-NET
sql-net 150/udp # SQL-NET
sqlsrv 156/tcp # SQL Service
sqlsrv 156/udp # SQL Service
mini-sql 1114/tcp # Mini SQL
mini-sql 1114/udp # Mini SQL
mysql-cluster 1186/tcp # MySQL Cluster Manager
mysql-cluster 1186/udp # MySQL Cluster Manager
ms-sql-s 1433/tcp # Microsoft-SQL-Server
ms-sql-s 1433/udp # Microsoft-SQL-Server
ms-sql-m 1434/tcp # Microsoft-SQL-Monitor
ms-sql-m 1434/udp # Microsoft-SQL-Monitor
sybase-sqlany 1498/tcp # Sybase SQL Any
sybase-sqlany 1498/udp # Sybase SQL Any
unisql 1978/tcp # UniSQL
unisql 1978/udp # UniSQL
unisql-java 1979/tcp # UniSQL Java
unisql-java 1979/udp # UniSQL Java
mysql-im 2273/tcp # MySQL Instance Manager
mysql-im 2273/udp # MySQL Instance Manager
mysql	3306/tcp # MySQL
mysql	3306/udp # MySQL
ssql 3352/tcp # Scalable SQL
ssql 3352/udp # Scalable SQL
postgresql 5432/tcp # PostgreSQL Database
postgresql 5432/udp # PostgreSQL Database
sqlexec	9088/tcp # IBM Informix SQL Interface
sqlexec	9088/udp # IBM Informix SQL Interface
sqlexec-ssl 9089/tcp # IBM Informix SQL Interface - Encrypted
sqlexec-ssl 9089/udp # IBM Informix SQL Interface - Encrypted

Клиент СУБД

Всю работу клиентского приложения с сервером БД можно свести к выполнению трех задач: подключение к серверу, отправка запросов и получение результатов, отключение. Эти и прочие функции доступны клиентскому приложению через API сервера баз данных. Функции API, доступные клиенту, описаны в документации соответствующей СУБД. В листинге 2 приведен пример использования API MySQL в программе на языке C.

Листинг 2. Пример MySQL-клиента на языке C

#include <stdio.h>
#include <stdlib.h>
#include "mysql.h" // подключение API
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
void exiterr(int exitcode)
{
fprintf(stderr, "%s\n", mysql_error(&mysql));
exit(exitcode);
}
int main()
{
uint i = 0;
if (!(mysql_connect(&mysql,"host","username","password"))) // соединение с БД
exiterr(1);
if (mysql_select_db(&mysql,"payroll")) exiterr(2);
if (mysql_query(&mysql,"SELECT name,rate FROM emp_master")) // запрос
exiterr(3);
// обработка ответа
if (!(res = mysql_store_result(&mysql))) exiterr(4);
while((row = mysql_fetch_row(res))) {
for (i=0 ; i < mysql_num_fields(res); i++)
printf("%s\n",row[i]);
}
if (!mysql_eof(res)) exiterr(5);
mysql_free_result(res);
mysql_close(&mysql); // отключение
}

Постоянные соединения с сервером БД

Операции открытия и закрытия соединения с БД привносят дополнительные накладные расходы в процесс взаимодействия клиентского приложения и сервера БД. Снизить их можно путем установления постоянного соединения (permanent connection) с базой данных. В этом случае соединение, открытое специальной функцией API, удерживается в этом состоянии для будущего использования. При повторном обращении к этому же серверу тем же пользователем (с логином и паролем, указанными при первом подключении) СУБД вернет дескриптор ранее открытого соединения.

Пример установления постоянного подключения к СУБД MySQL приведен в листинге 3.

Листинг 3. Постоянное подключение к MySQL из PHP-скрипта

<?php
$link = mysql_pconnect("localhost", "username", "password")
or die("Could not connect: " . mysql_error());
print ("Connected successfully");
?>

Ограничения

Использование API СУБД в клиентских приложениях простой, но не всегда подходящий способ. При переходе с одной СУБД на другую это потребует переписывания кода клиентов. Более прозрачным работу с базами данных делает применение промежуточного программного обеспечения или использование унифицированных интерфейсов прикладного программирования (ODBC, JDBC и др.).

CC-BY-CA Анатольев А.Г., 31.01.2012