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

Учебные программы » Сетевые технологии » Конспект лекций

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

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

Клиент-серверные СУБД, как правило, представляют клиентам несколько разных способов подключения, среди которых именованные каналы, сокеты, сетевые порты. Последние являются основным способом взаимодействия приложения и сервера баз данных. Номера зарегистрированных портов для распространенных СУБД можно посмотреть в файле /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 и др.).

Анатольев А.Г., 12.12.2013

Постоянный адрес этой страницы:

↑ В начало страницы