Введение
Приложения, для работы которых необходимы базы данных, используются практически повсеместно. Причем по такому принципу устроено большинство современных программных продуктов. И неудивительно, что проблема совместимости баз данных с различными языками программирования стоит достаточно остро. Она получила название «потеря соответствия».
На практике это проявляется в том, что при работе определенных баз данных с некоторыми приложениями возникают ошибки, которые могут быть как явными, так и скрытыми, причем второй вариант более опасен, поскольку такие несоответствия со временем будут накапливаться, и может оказаться, что к моменту обнаружения проблемы база данных будет серьезно повреждена. А учитывая тот факт, что часто такие программные продукты ориентированы на оптимизацию бизнес-процессов, возникновение ошибок может повлечь за собой серьезные финансовые потери.
Несмотря на достаточную актуальность данного вопроса единого решения до сих пор предложено не было. Были разработаны определенные меры для устранения несоответствия при интеграции определенных баз с продуктами, написанными на конкретном языке программирования, но это лишь частные случаи. Поэтому в каждой конкретной ситуации подобные вопросы зачастую приходится решать заново.
На сегодняшний день наибольшее распространение получили распределённая база данных и программные продукты, созданные при помощи объектно-ориентированных языков. Методы их оптимизации и семантика настолько существенно различаются, что объединение этих двух комплексов часто влечет «потерю соответствия» и появление ошибок [4].
В рамках данной курсовой работы была поставлена задача разработки и создания серверов, на котором хранятся удаленные базы данных и клиентского приложения, которое обращается к серверам за данными и соответствующим образом ими манипулирует. Клиентское приложение должно обладать следующим функционалом: отображение на экранной форме содержимого таблиц базы данных обоих серверов, добавление, удаление, обновление записей таблиц, вывод результатов запросов к базе данных в виде таблице для каждого сервера отдельно, а так же делать общие запросы к обоим серверам.
В данной работе для разработки клиентского приложения и реализации сервера базы данных был выбран язык программирования Java, для реализации базы данных - СУБД MySQL. На современном этапе развития информационных технологий Java - это объектно-ориентированный универсальный язык программирования, предназначенный для прикладного программирования в неоднородных компьютерных сетях. Java-приложения обладают переносимостью в любую операционную систему, высокой скоростью работы, многофункциональностью. Взаимодействие между Java - приложением и СУБД организовано с помощью стандартного прикладного интерфейса JDBC языка Java.
Для взаимодействия сервера и клиента используются сокеты.
Сокеты (сетевые разъёмы) - это логическое понятие, соответствующее разъёмам, к которым подключены сетевые компьютеры и через которые осуществляется двунаправленная поточная передача данных между компьютерами. Сокет определяется номером порта и IP-адресом. При этом IP-адрес используется для идентификации компьютера, номер порта - для идентификации процесса, работающего на компьютере. Когда одно приложение знает сокет другого, создается сокетное протоколо-ориентированное соединение по протоколу TCP/IP. Клиент пытается соединиться с сервером, инициализируя сокетное соединение. Сервер прослушивает сообщение и ждет, пока клиент не свяжется с ним. Первое сообщение, посылаемое клиентом на сервер, содержит сокет клиента. Сервер, в свою очередь, создает сокет, который будет использоваться для связи с клиентом, и посылает его клиенту с первым сообщением. После этого устанавливается коммуникационное соединение.
Сокетное соединение с сервером создается клиентом с помощью объекта класса Socket. При этом указывается IP-адрес сервера и номер порта. Если указано символьное имя домена, то Java преобразует его с помощью DNS-сервера к IP-адресу. Например, если сервер установлен на этом же компьютере, соединение с сервером можно установить из приложения клиента с помощью инструкции:
Socket socket = new Socket("ИМЯ_СЕРВЕРА", 4000);
Сервер ожидает сообщения клиента и должен быть заранее запущен с указанием определенного порта. Объект класса ServerSocket создается с указанием конструктору номера порта и ожидает сообщения клиента с помощью метода accept()класса ServerSocket, который возвращает сокет клиента:
ServerSocket server = new ServerSocket(4000);
Socket socket = server.accept();
Таким образом, для установки необходимо установить IP-адрес и номер порта сервера, IP-адрес и номер порта клиента. Порт клиента и сервера устанавливаются одинаковыми. Клиент и сервер после установления сокетного соединения могут получать данные из потока ввода и записывать данные в поток вывода с помощью методов getInputStrеam() и getOutputStrеam() или к PrintStream для того, чтобы программа могла трактовать поток как выходные файлы [5].