Аннотация В этой статье в качестве примера используется база данных 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) Создайте представление типа данных для каждого столбца таблицы. СОЗДАЙТЕ ИЛИ ЗАМЕНИТЕ ВИД v_dbstru AS SELECT table_name, columns_name, data_type, data_length, data_precision, data_scale, columns_id FROM all_tab_columns WHERE Owner='user1' ; //user1 Быть владельцем таблицы данных. 2) Создайте представление ключевого столбца таблицы CREATE OR REPLACE VIEW v_pkey_column AS SELECT b.table_name, b.column_name, b.position FROM all_constraints a, all_cons_columns b WHERE a.owner=b.owner И a.constraint_name=b.constraint_name И a .owner='user1' И a.constraint_type='P'; |
3. Основной код программы
1) Инициализация программы
String tablename=request.getParameter("tablename"); //Извлекаем имя таблицы
String OperType=request.getParameter("OperType"); //Извлекаем тип операции
String sFieldValue="";/ /Сохранение значения данных поля, отправленного в форме
String fieldname="", Datatype="" //Сохранение имени поля, тип данных поля
int iFieldvalue=0;
String updateSql="",whereSql="where ", insSql1="; ", insSql2 ="", opSql="", strSql ="";
ResultSet rs1=null, rs2=null;
insSql1="вставить в "+tablename+" (";
insSql2="values(";
2) Создать оператор sql ключевые поля Частично
сгенерируйте часть ключевого поля оператора вставки, например: вставьте в таблицу1 (id и значения (100)
используйте только ключевые поля для создания оператора обновления и удаления, где часть, например: где id = 100); ;
если тип операции — обновление, данные ключевых полей не будут изменены в веб-форме.
rs1=Stmt.executeQuery("ВЫБЕРИТЕ имя_столбца ИЗ v_pkey_column WHERE имя_таблицы='"+имя_таблицы+"'"); //Получаем имя ключевого поля while(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("+имя поля+")+1 FROM "+имя_таблицы); rs2.next();iFieldvalue=rs2.getInt(1);insSql2+=Integer.toString(iFieldvalue)+","; }иначе если(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 ";} } } гдеSql=whereSql.substring(0,whereSql.length()-4); |
3) Часть неключевого поля оператора SQL генерирует
оператор обновления, например: обновить таблицу1, установить столбец1 = значение1,… где id = 100,
оператор вставки, например: вставить в значения таблицы1 (id, столбец1,…) (100, значение1,…)
updateSql="обновление "+tablename+" set "; strSql="ВЫБРАТЬ имя_столбца, тип_данных, длину_данных, точность_данных, масштаб_данных FROM v_dbstru a "+"где 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); //Получаем имя и тип данных неключевого поля while(rs1.next()){ fieldname=rs1.getString("имя_столбца"); 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, то есть обновляем набор имен таблиц... где fieldname=... if(OperType.equals("обновление")){ 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.закрыть(); |
4) Создайте полный оператор sql и выполните его.
если(OperType.equals("вставить")) 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, чтобы просто проверить или обработать данные во внешнем браузере, а затем отправить их. На внутреннем сервере обработка не выполняется, а данные отправляются. по форме хранится непосредственно в базе данных в таблице. На данный момент использование третьего метода очень просто и может значительно снизить рабочую нагрузку разработчика.