|
*** |
Метод обновления данных в Internet магазинеЕвгений Вересов Причины разработки программыЕсли вы владелец или разработчик магазина в Internet, и ваш сервер находится на площадке у провайдера, то эта статья для вас. Предлагаемая методика позволяет обновлять информацию в базе данных магазина удаленно, используя обычное коммутируемое соединение с Internet. Телефонная линия, модем и приложение под Windows - это все, что нужно. При разработке программы автор исходил из предположения, что базу данных для магазина хорошо бы готовить под Windows, например, в MS Excel или MS Access, а затем передавать на сервер. И еще, было бы не худо видеть на локальном компьютере содержимое базы данных сервера, ну и корректировать его. Маленькая деталь - сервер работает под Linux (Unix). "Однако, черт возьми, как?" Состав программного обеспеченияОпределим состав программных средств сервера Internet-магазина. Операционная система: Linux (Unix); Web-сервер: Apache; CУБД: MySQL; Контейнер для выполнения Servlets и JSP: Tomcat; Интерпретатор Java; Ну и собственно Servlet(s) - это тот Java-модуль, который возьмет на себя все хлопоты по работе с базой данных на стороне сервера. На стороне клиента задействованы: Операционная система: Windows; СУБД, работающая под Windows и имеющая JDBC-драйвер, например, MS Access. Возможно использование MS Excel или MS Word. Интерпретатор Java; Клиентское Swing GUI Java-приложение, работающее с локальной и серверной базами данных, ну и с оператором тоже. Куда же от этого умника деться? Сформулируем задачуПрограмма должна: 1. Cчитывать данные из локальной БД Access, передавать иx через Internet на сервер, и там записывать в базу данных MySQL. Все эти функции должны выполняться автоматически, в обязанности оператора входит лишь инициация процесса. 2. Считывать данные из БД MySQL-сервера, отображать их на машине клиента, предоставлять возможность оператору клиентской машины корректировать отдельные записи или группы записей в БД сервера. Протокол обмена данными HTPP. Языки разработки приложения: Java, SQL. Автор не делает никаких предположений относительно того, как готовятся данные в БД Access, это легко реализуется разными методами и средствами. Автор не рассматривает серверную бизнес-логику в части, не касающейся обмена данными. Отметим также, что описываемая программа предназначена для обслуживания магазина и никак не заменяет Web-броузер - инструмент пользователя. "..Соломон родил Равоама; Равоам родил Авию; Авия родил ...." Алгоритм реализации первого пункта задачиПредельно упростим задачу. Мы имеем две таблицы: PRICE - локальной базы данных MS Access и SALES - серверной базы данных MySQL. Задача в том, чтобы перенести данные PRICE в SALES через Internet. Опуская обременительные детали Java- кода, например, такие как try {...} catch (...) {.....}, кратко рассмотрим алгоритм реализации задачи. 1. Подключимся к БД Access посредством моста JDBC-ODBC. Class.forName("sun.jdbc.odbc.JdbcOdbc Driver"); Connection Connect = DriverManager.get Connection("jdbc:odbc:price"); где, price - источник данных ODBC. 2. Используя SQL-оператор "SELECT * FROM PRICE", считаем данные в объект класса ResultSet. Statement statementAccess = Connect. createStatement(); ResultSet resultSetAccess = statement Access.executeQuery ("SELECT * FROM PRICE");. 3. Подготовим SQL-оператор INSERT. Укажем в операторе перечень полей SALES и соответствующие им значения, считанные из таблицы PRICE базы данных Access. while (resultSetAccess.next()) Id, SalesGroupId, Name, Property - имена столбцов таблицы SALES. Интересный момент! Данные первой записи из таблицы PRICE БД Access входят в состав оператора INSERT, приготовленного для таблицы SALES. 4. Позаботимся о том, чтобы отправить оператор INSERT на сервер и выполнить его там, записав данные в таблицу SALES, для этого мы должны определить параметры: - http-адрес сервера Internet, к которому мы собираемся обратиться; - драйвер базы данных MySQL; - url базы данных сервера; - имя базы данных, в которую мы намерены записать данные; - имя и пароль пользователя, с которыми мы собираемся войти в базу данных. Отметим, что программой предопределены эти параметры, но выведены оператору в виде обычных редактируемых полей с целью возможного их изменения. String http= httpField.getText(); Полностью сформированная строка, подлежащая передаче на сервер, выглядит так: String postData= "1=" + encoded Value(driver) + 5. Следующий шаг состоит в том, чтобы связаться с выбранным сервером и передать данные. Делается это одним из стандартных для Java способом: - создать URL; - открыть, по созданному URL, новое соединение и настроить его; - создать выходной поток и поместить в поток подготовленные данные; - закрыть выходной поток; - создать входной поток; - принять ответ сервера; - закрыть входной поток. Текст, реализующий перечисленные функции: URL server = new URL (http); Второй интересный момент! Оператор INSERT содержащий данные из БД Access, отправлен на сервер в составе строки postData . 6. Рассмотрим серверную логику в части обмена данными. Отметим, что на сервере при запуске Linux стартует ряд служб и прикладных программ. Среди них: - WEB сервер Apache; - СУБД MySQL; - Контейнер сервлетов Tomcat. Tomcat сконфигурирован таким образом, что при своей загрузке он инициирует запуск сервлетов. Примечание. Как сконфигурировать Тоmcаt, чтобы он при своем старте загружал сервлеты - тема отдельной статьи. Напомним, что сервлет - это объект класса HttpServlet библиотеки javax.servlet.http языка Java, изначально спроектированный SUN для реализации серверной логики. Вкупе с этим классом почти всегда используются интерфейсы: - HttpServletRequest; - HttpServletResponse; - HttpSesison. Сервлет реализует функции: - прием от клиентской программы и выделение переданных параметров, необходимых для подключения к БД MySQL; - подключение к базе данных; - выполнение SQL-оператора, в данном случае INSERT для занесения строки данных в таблицу SALES базы данных MySQL; - создание выходного потока и отправки с ним результата выполнения SQL-оператора. Прием и выделение параметров выполнено так: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
break;
case 2: url=request.getParameter(pname); Java развивается весьма стремительно и сейчас, год спустя, автор написал бы этот фрагмент по-другому. Подключимся к базе данных MySQL: Class.forName(driver); Connection connection = Driver Manager.getConnection(url, username, password);. Вот где востребованы параметры базы данных, переданные от программы - клиента. Выполним, наконец, оператор INSERT: Statement statement = connection. createStatement(); ResultSet resultSet = statement. executeQuery(query); DBResults dbResults = new DB Results(connection); где public class DBResults implements Serializable{connection} Все. Строка данных перенесена из локальной базы данных в базу данных сервера. Известим программу клиента о результате выполнения операции, для чего создадим выходной поток и отправим в него результат операции: ObjectOutputStream pout = new Object OutputStream(response.getOutputStream()); При получении положительного ответа клиентом будет послана очередная строка из resultSetAccess. Вывод: Нет никаких ограничений для передачи из программы клиента на сервер любых операторов SQL и выполнения их там. Например, можно послать оператор SELECT и полученные данные отобразить у клиента, или передать на исполнение операторы LOAD DATA INFILE, DELETE, UPDATE, DROP. Но об этом вы узнаете во второй части статьи. Литература1. Патрик Ноутон, Герберт Шилдт. JAVA 2. Пер. с англ. СПб.: БХВ-Петербург. 2000. 2. М.Холл.Сервлеты и JavaServer Pages. Библиотека программиста. СПб. : Питер, 2001. Источник: http://www.comprice.ru/ |
|
Copyright © "Internet Zone", info@izcity.com |