Аннотация
В этой статье в качестве примера используется база данных Oracle, чтобы представить простой и универсальный метод хранения и обработки данных при разработке WEB-приложений с использованием технологии JSP, чтобы уменьшить рабочую нагрузку на разработку и предоставить основной программный код.
Введение
Технология J2EE (Java 2 Enterprise Edition) широко используется при разработке веб-приложений. Технологии JavaBean и Servlet предоставляют разработчикам более понятную среду разработки. Технология JSP используется для отображения страниц, а технология Servlet используется для выполнения большого количества задач. бизнес-процессы, использующие Beans для хранения данных и некоторой бизнес-обработки. В веб-приложениях обработка хранения бизнес-данных в базе данных часто бывает очень трудоемкой. Одной из основных форм является хранение данных формы в базе данных. Весь процесс обработки приложения включает в себя большое количество таких операций по хранению данных, и каждая из них. форму необходимо обрабатывать. Написание соответствующей программы хранения данных отдельно отнимает у разработчиков много времени и сил. Какие методы использовать для снижения нагрузки на разработку хранилища данных формы — вопрос, заслуживающий изучения.
Два распространенных метода хранения и обработки данных формы:
1. Напишите соответствующий программный код для каждой формы
на странице JSP, в JavaBean или сервлете. Используйте функцию request.getparameter() для извлечения данных, отправленных формой, по одному, или напишите. соответствующий JavaBean. Используйте метод setProperty для автоматической загрузки данных в JavaBean, затем сгенерируйте операторы SQL (вставка, обновление, удаление) и, наконец, выполните функцию Executeupdate() для завершения хранения таблицы данных.
2. Автоматически генерировать программный код JavaBean для каждой таблицы данных.
Система базы данных должна обеспечивать пользователям возможность чтения структуры таблицы и определения ключевых полей. Используйте объектно-ориентированные инструменты быстрой разработки, такие как PowerBuilder, Delphi и т. д., для разработки программы автоматической генерации кода Java. В этой программе считывается структура таблицы базы данных: имя поля, тип данных, длина данных и автоматически генерируется JavaBean-код. В этом коде определите переменные с одинаковыми именами, соответствующими полям в таблице, установите методы setValue и getValue для всех переменных, а также установите функции вставки, обновления и удаления для обработки создания и выполнения операторов SQL для вставки, обновления и т. д. и удалить соответственно.
На странице обработки данных, отправленной формой, напишите следующий код для хранения данных формы в JavaBean:
<jsp: useBean id="table" class="table1_bean" />
<jsp: setProperty name="table" property="*" />
(Примечание: table1_bean — это автоматически сгенерированный JavaBean, соответствующий определенной таблице, упомянутой выше)
Затем вызовите функции вставки, обновления и удаления в table1_bean, чтобы завершить сохранение таблицы данных и вернуть результаты выполнения. нравиться:
<%boolean Success =table.insert(); %>
Первый метод прост и интуитивно понятен, но для каждой формы необходимо написать соответствующую программу обработки данных. Для немного более крупных приложений количество форм может быть большим, что приводит к большой рабочей нагрузке и низкой эффективности разработки. При изменении структуры таблицы, например при добавлении или вычитании полей, необходимо изменить соответствующую программу обработки данных.
Второй метод намного проще первого. Обработка данных каждой таблицы данных осуществляется соответствующим JavaBean. JavaBean генерируется автоматически, и его не нужно записывать. При изменении структуры таблицы вам нужно только создать новую. JavaBean и перезаписать его после компиляции с помощью Java. Можно использовать исходный класс Java. Однако этот метод требует разработки программы автоматической генерации JavaBean, а JavaBeans необходимо перегенерировать и компилировать при изменении структуры таблицы.
Представляем простой и универсальный метод хранения данных форм
при разработке веб-приложений. Многие формы отправляются на внутренний сервер после простой проверки данных во внешнем браузере. Сервер не выполняет никакой обработки данных и напрямую сохраняет их. таблица базы данных. В этом случае мы можем просто написать программу для единообразной обработки этих форм и сохранения данных в соответствующей таблице данных. Этот метод также требует, чтобы система базы данных поддерживала чтение структуры таблиц и идентификацию ключевых полей. Для написания этой программы мы используем технологию JSP, а файл программы называется DbdataStore.jsp.
1. Формат вызова
Метод вызова действия формы на веб-странице выглядит следующим образом:
<Form Name=Frm1 Method=Post Action="DBdataStore.jsp? tablename=table1&OperType=…">
table1 — это имя таблицы базы данных. где будут храниться данные, и операция OperType. Существует три типа: вставка, обновление и удаление.
Значения имен в <input type=text name=…>, <textarea name=…><select name=…> в форме должны быть такими же, как имена полей таблицы данных. формы извлекаются один за другим в DBdataStore.jsp. Если в форме не определены входные данные и результирующее значение имеет нулевое значение, поле не будет обработано.
2. Определение представления на примере Oracle.
1) Создайте представление типа данных для каждого столбца таблицы
CREATE OR REPLACE VIEW v_dbstru AS SELECT имя_таблицы, имя_столбца, тип_данных, длина_данных, точность_данных, масштаб_данных, идентификатор_столбца
FROM all_tab_columns WHERE Owner='user1'; //user1 является владельцем таблицы данных.
2) Создайте представление ключевого столбца таблицы
CREATE OR REPLACE VIEW v_pkey_column AS
ВЫБЕРИТЕ b.table_name, b.column_name, b.position
ИЗ all_constraints a, all_cons_columns b
WHERE a.owner=b.owner AND a.constraint_name=b.constraint_name AND a.owner='user1' AND a.constraint_type='P'
3. Основной код программы
1) Инициализация программы
String tablename=request.getParameter(" tablename"); //Извлекаем имя таблицы
String OperType=request.getParameter("OperType"); //Извлечение типа операции
String sFieldValue="";//Хранение значения данных поля, отправленного формой
String fieldname="", Datatype="" //Имя поля хранения, тип данных поля
интервал iFieldvalue = 0;
Строка updateSql="",whereSql=" где ", insSql1="", insSql2="", opSql="", strSql="";
ResultSet rs1=null, rs2=null;
insSql1="вставить в "+имя_таблицы+" (";
insSql2="values(";
2) Создайте часть ключевого поля оператора sql
и сгенерируйте часть ключевого поля оператора вставки, например: вставьте в таблицу1 (id и значения (100)
используйте только ключевые поля для
);сгенерируйте оператор обновления и удаления, где части, например: где id=100,
когда тип операции — обновление, данные ключевых полей не будут изменены в веб-форме.
rs1=Stmt.executeQuery("SELECT columns_name FROM v_pkey_column WHERE table_name='"+tablename+"'" //Получаем имя ключевого поля
в то время как (rs1.next ()) {
fieldname=rs1.getString("имя_столбца");
rs2=Stmt.executeQuery("SELECT data_type FROM v_dbstru WHERE table_name='"+tablename+"' AND columns_name='"+fieldname+"'"); //Получаем тип данных ключевого поля if(rs2.next()){
Datatype=rs2.getString("тип_данных");
sFieldValue=request.getParameter(fieldname.toLowerCase());
//Создаем часть ключевого поля оператора вставки if(OperType.equals("insert")){
insSql1+=имя поля+",";
if((sFieldValue==null)){
//Если значение данных ключевого поля не отправлено в форму, эта статья будет обрабатывать его только как числовой тип, а значение данных будет рассчитываться в соответствии с серийным номером.
rs2 = Stmt.executeQuery("SELECT max("+fieldname+")+1 FROM "+tablename(); iFieldvalue=rs2.getInt(1); insSql2+=Integer.toString(iFieldvalue)+"," } иначе if(Datatype.equals("ДАТА")){
insSql2+= "To_Date('" + sFieldValue + "','ГГГГ-ММ-ДД'),";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
insSql2+="'" + sFieldValue+"',";}
else /*NUMBER, FLOAT */ insSql2+=sFieldValue+","}
//Создаем оператор обновления и удаления, где часть: где имя поля=... И
if(OperType.equals("обновить") || OperType.equals("удалить")){
if(Datatype.equals("ДАТА")){
whereSql+=fieldname+"=To_Date('" + sFieldValue + "','ГГГГ-ММ-ДД') И ";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
гдеSql+=имя поля+"='" + sFieldValue+"' И ";}
else /*NUMBER, FLOAT */whereSql+=fieldname+"="+ sFieldValue+" AND ";}
}
}
whereSql=whereSql.substring(0,whereSql.length()-4);
3) Оператор sql части неключевого поля генерирует
оператор обновления, например: update table1 set columns1=value1,... где id= 100
оператор вставки, например: вставить в таблицу1(id, столбец1,…)значения(100, значение1,…)
updateSql="update "+tablename+" set ";
strSql="SELECT columns_name, data_type, data_length, data_precision, data_scale FROM v_dbstru a "+"where table_name='"+tablename+"' И a.column_name отсутствует (SELECT b.column_name FROM v_pkey_column b где b.table_name=a.table_name) )";
rs1=Stmt.executeQuery(strSql); //Получаем имя поля и тип данных неключевых полей
в то время как (rs1.next ()) {
fieldname=rs1.getString("column_name"); Datatype=rs1.getString("data_type"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //Если форма не отправляет значение поля, игнорировать поле Обработка if((sFieldValue!=null)){
//Создаем оператор вставки =insSql1+insSql2, то есть вставляем в имя_таблицы(… и значения(…)
if(OperType.equals("insert")){ insSql1+=fieldname+",";
if(Datatype.equals("ДАТА")){
insSql2+= "To_Date('" + sFieldValue + "','ГГГГ-ММ-ДД'),";
} else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
insSql2+="'" + sFieldValue+"',";}else /*NUMBER,FLOAT*/ insSql2+= sFieldValue+",";}
//Создаем оператор обновления=updateSql+whereSql, то есть обновляем набор имен таблиц... где имя поля=... if(OperType.equals("update")){
if(Datatype.equals("ДАТА")){
updateSql+=fieldname+"=To_Date('" + sFieldValue + "','ГГГГ-ММ-ДД'),";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
updateSql+=fieldname+"='" + sFieldValue,1}+"',";}else /*NUMBER,FLOAT*/ updateSql+=fieldname+"="+sFieldValue+",";}))
rs1.close();
4) Создайте полный оператор sql и выполните
if(OperType.equals("insert"))
opSql=insSql1.substring(0, insSql1.length()-1)+")"+insSql2.substring(0, insSql2.length()-1)+");
если(OperType.equals("обновление"))
opSql=updateSql.substring(0, updateSql.length()-1)+" "+whereSql; if(OperType.equals("delete"))
opSql="delete FROM "+tablename+" "+whereSql;
//Полный оператор sql opSql создан
попробуйте {sqlnrows=Stmt.executeUpdate(opSql);}
catch(SQLException e){out.println("SQLException:"+opSql);}
4. Возможности
Этот метод использует эту программу единообразно для всех таких напрямую хранящихся форм. Он универсален и не требует использования для каждой формы или каждой. Форма Соответствующая программа разрабатывается самостоятельно для таблицы данных. Рабочая нагрузка на разработку очень мала, а вызов очень прост. При этом при изменении структуры таблицы нет необходимости модифицировать программу DBdataStore.jsp. Эту программу также можно переписать как сервлет, а формат вызова — <Form Name=Frm1 Method=Post Action="DBdataStoreServelet?tablename=table1&OperType=…">.
Заключение.
Если в веб-приложении данные формы требуют дальнейшей проверки или обработки данных на сервере после отправки, необходимо использовать второй метод. Но во многих случаях пользователи вводят или изменяют данные в форме, используют JavaScript, чтобы просто проверить или обработать данные во внешнем браузере, а затем отправить их. На внутреннем сервере обработка не выполняется, а данные отправляются. по форме хранится непосредственно в базе данных в таблице. На данный момент использование третьего метода очень просто и может значительно снизить рабочую нагрузку разработчика.