Resumen Este artículo toma la base de datos Oracle como ejemplo para presentar un método de procesamiento y almacenamiento de datos de forma simple y universal al desarrollar aplicaciones WEB utilizando tecnología JSP para reducir la carga de trabajo de desarrollo y proporcionar el código del programa principal. Introducción La tecnología J2EE (Java 2 Enterprise Edition) se ha utilizado ampliamente en el desarrollo de aplicaciones web. Las tecnologías JavaBean y Servlet proporcionan a los desarrolladores un entorno de desarrollo más claro. La tecnología JSP se utiliza para mostrar páginas y la tecnología Servlet se utiliza para completar una gran cantidad de. procesos de negocio. , utilizando Beans para almacenar datos y algunos procesos de negocio. En las aplicaciones WEB, el trabajo de procesamiento de almacenar datos comerciales en la base de datos es a menudo muy arduo. Una de las formas principales es almacenar datos del formulario en la base de datos. Todo el proceso de procesamiento de la aplicación implica una gran cantidad de operaciones de almacenamiento de datos, y cada una de ellas. El formulario debe procesarse. A los desarrolladores les lleva mucho tiempo y energía escribir el programa de almacenamiento de datos correspondiente por separado. Qué métodos utilizar para reducir la carga de trabajo de desarrollo del almacenamiento de datos de formularios es una cuestión que vale la pena estudiar. Dos métodos comunes de almacenamiento y procesamiento de datos de formularios: 1. Escriba el código de programa correspondiente para cada formulario en la página JSP o JavaBean o Servlet. Utilice la función request.getparameter() para extraer los datos enviados por el formulario uno por uno, o escriba el. JavaBean correspondiente Utilice el método setProperty para recuperar automáticamente los datos en el JavaBean, luego generar declaraciones SQL (insertar, actualizar, eliminar) y finalmente ejecutar la función ejecutarupdate () para completar el almacenamiento de la tabla de datos. 2. Generar automáticamente un código de programa JavaBean para cada tabla de datos. El sistema de base de datos debe permitir a los usuarios leer la estructura de la tabla e identificar campos clave. Utilice herramientas de desarrollo rápido orientadas a objetos, como PowerBuilder, Delphi, etc., para desarrollar un programa de generación automática de código Java. En este programa, se lee la estructura de la tabla de la base de datos: nombre del campo, tipo de datos, longitud de los datos y se genera automáticamente un código JavaBean. En este código, defina variables con los mismos nombres correspondientes a los campos de la tabla, establezca los métodos setValue y getValue para todas las variables y establezca funciones de inserción, actualización y eliminación para manejar la generación y ejecución de declaraciones SQL para inserción, actualización, y eliminar respectivamente. En la página de procesamiento de datos enviada por el formulario, escriba el siguiente código para almacenar los datos del formulario en JavaBean: <jsp: useBean id="table" class="table1_bean" /> <jsp: setProperty name="table" property=" * " /> (Nota: table1_bean es el JavaBean generado automáticamente correspondiente a una determinada tabla) y luego llama a las funciones de inserción, actualización y eliminación en table1_bean para completar el almacenamiento de la tabla de datos y devolver los resultados de la ejecución. Por ejemplo: <%boolean Success =table.insert(); %> El primer método es simple e intuitivo, pero requiere escribir los procedimientos de procesamiento de datos correspondientes para cada formulario. Para aplicaciones un poco más grandes, la cantidad de formularios puede ser grande, lo que resulta en una gran carga de trabajo de desarrollo y una baja eficiencia de desarrollo. Cuando cambia la estructura de la tabla, como agregar o restar campos, es necesario modificar el programa de procesamiento de datos correspondiente. El segundo método es mucho más simple que el primero. El procesamiento de datos de cada tabla de datos lo implementa el JavaBean correspondiente. El JavaBean se genera automáticamente y no es necesario escribirlo cuando cambia la estructura de la tabla. JavaBean y sobrescríbalo después de compilar con Java. Se puede utilizar la clase Java original. Sin embargo, este método requiere el desarrollo de un programa de generación automática de JavaBean, y los JavaBean deben regenerarse y compilarse cuando cambia la estructura de la tabla. Presentamos un método simple y universal para almacenar datos de formularios en el desarrollo de aplicaciones WEB. Muchos formularios se envían al servidor backend después de una simple verificación de datos en el navegador front-end. El servidor no realiza ningún procesamiento de los datos y los almacena directamente. una tabla de base de datos. En este caso, podemos simplemente escribir un programa para procesar estos formularios de manera uniforme y almacenar los datos en la tabla de datos correspondiente. Este método también requiere que el sistema de base de datos admita la lectura de la estructura de la tabla y la identificación de campos clave. Usamos tecnología JSP para escribir este programa y el archivo del programa se llama DbdataStore.jsp. 1. Formato de llamada El método de llamada de acción del formulario en la página web es el siguiente: <Form Name=Frm1 Method=Post Action="DBdataStore.jsp? tablename=table1&OperType=…"> table1 es el nombre de la tabla de la base de datos donde se almacenarán los datos y la operación OperType. Hay tres tipos: insertar, actualizar y eliminar. Los valores de nombre en <input type=text name=…>, <textarea name=…><select name=…> en el formulario deben ser los mismos que los nombres de los campos de la tabla de datos. El formulario se extrae uno por uno en DBdataStore.jsp. Si no hay ninguna entrada definida en el formulario y el valor resultante es un valor nulo, el campo no se procesará. 2. Ver la definición tomando Oracle como ejemplo 1) Crear una vista de tipo de datos para cada columna de la tabla CREAR O REEMPLAZAR LA VISTA v_dbstru COMO SELECCIONAR nombre_tabla, nombre_columna, tipo_datos, longitud_datos, precisión_datos, escala_datos, id_columna DESDE todas_tab_columnas DONDE propietario='usuario1' ; //usuario1 Sea el propietario de la tabla de datos. 2) Cree la vista de columna clave de la tabla CREAR O REEMPLAZAR VISTA v_pkey_column COMO SELECCIONAR b.table_name, b.column_name, b.position FROM all_constraints a, all_cons_columns b DONDE a.owner=b.owner AND a.constraint_name=b.constraint_name Y a .owner='user1' AND a.constraint_type='P'; |
3. Código del programa principal
1) Inicialización del programa
String tablename=request.getParameter("tablename"); //Extraer el nombre de la tabla
String OperType=request.getParameter("OperType"); //Extraer el tipo de operación
String sFieldValue="";/ /Almacenar el valor de datos del campo enviado por el formulario
String fieldname="", Datatype="" //Almacenar el nombre del campo, tipo de datos del campo
int iFieldvalue=0;
String updateSql="", whereSql=" donde ", insSql1=" ", insSql2 ="", opSql="", strSql ="";
ResultSet rs1=null, rs2=null;
insSql1="insertar en "+nombre de tabla+" (";
insSql2="valores(";
2) Generar declaración SQL campos clave Genere parcialmente
la parte del campo clave de la declaración de inserción, como por ejemplo: insertar en la tabla1 (id y valores (100));
use solo los campos clave para generar la parte de actualización y eliminación donde, como por ejemplo: donde id = 100; ;
cuando el tipo de operación es actualización, los datos de los campos clave no se modificarán en el formulario web.
rs1=Stmt.executeQuery("SELECCIONE nombre_columna DESDE v_pkey_column DONDE nombre_tabla='"+nombretabla+"'"); //Obtener el nombre del campo clave while(rs1.next()){ nombre de campo = rs1.getString ("nombre_columna"); rs2=Stmt.executeQuery("SELECCIONE tipo_datos DESDE v_dbstru DONDE nombre_tabla='"+nombretabla+"' AND column_name='"+fieldname+"'"); //Obtiene el tipo de datos del campo clave if(rs2.next()){ Tipo de datos=rs2.getString("tipo_datos"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //Generar la parte del campo clave de la declaración de inserción if(OperType.equals("insert")){ insSql1+=nombre de campo+","; si((sFieldValue==null) ){ // Cuando el valor de los datos del campo clave no se envía en el formulario, este artículo solo lo procesará como un tipo numérico y el valor de los datos se calculará de acuerdo con el número de serie. rs2= Stmt.executeQuery("SELECT max("+nombre de campo+")+1 FROM "+nombre de tabla); rs2.next();iFieldvalue=rs2.getInt(1);insSql2+=Integer.toString(iFieldvalue)+","; }si no(tipo de datos.equals("FECHA")){ insSql2+= "To_Date('" + sFieldValue + "','AAAA-MM-DD'),"; }de lo contrario si(Tipo de datos.equals("VARCHAR2") || Tipo de datos.equals("CHAR")){ insSql2+="'" + sFieldValue+"',";} else /*NÚMERO, FLOTADOR */ insSql2+=sFieldValue+","} //Generar declaración de actualización y eliminación donde parte: donde nombre de campo=... Y if(OperType.equals("actualizar") || OperType.equals("eliminar")){ if(tipo de datos.equals("FECHA")){ dondeSql+=nombredecampo+"=To_Date('" + sFieldValue + "','AAAA-MM-DD') AND "; }de lo contrario si(Tipo de datos.equals("VARCHAR2") || Tipo de datos.equals("CHAR")){ dondeSql+=nombredecampo+"='" + sFieldValue+"' AND ";} else /*NÚMERO, FLOAT */ dondeSql+=nombredecampo+"="+ sFieldValue+" AND ";} } } dondeSql=whereSql.substring(0, dondeSql.length()-4); |
3) La parte del campo no clave de la declaración SQL genera
una declaración de actualización, como por ejemplo: actualizar tabla1 establecer columna1=valor1,… donde id=100
insertar declaración, como por ejemplo: insertar en la tabla1 (id, columna1,…) valores (100, valor1,…)
updateSql="actualizar "+nombretabla+" establecer "; strSql="SELECCIONE nombre_columna, tipo_datos, longitud_datos, precisión_datos, escala_datos DESDE v_dbstru a "+"donde nombre_tabla='"+nombretabla+"' Y a.column_name no está en (SELECCIONAR b.column_name FROM v_pkey_column b donde b.table_name=a.table_name)"; rs1=Stmt.executeQuery(strSql); //Obtiene el nombre del campo no clave y el tipo de datos while(rs1.next()){ nombre de campo = rs1.getString ("nombre_columna"); tipo de datos = rs1.getString ("tipo_datos"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //Si el formulario no envía el valor de este campo, ignora el procesamiento de este campo if((sFieldValue!=null)){ //Generar instrucción de inserción =insSql1+insSql2, es decir, insertar en nombre de tabla(… y valores(…) if(OperType.equals("insertar")){ insSql1+=nombredecampo+","; if(tipo de datos.equals("FECHA")){ insSql2+= "To_Date('" + sFieldValue + "','AAAA-MM-DD'),"; } else if(Tipo de datos.equals("VARCHAR2") || Tipo de datos.equals("CHAR")){ insSql2+="'" + sFieldValue+"',";}else /*NUMBER,FLOAT*/ insSql2+= sFieldValue+",";} //Generar declaración de actualización =updateSql+whereSql, es decir, actualizar el conjunto de nombres de tabla... donde nombre de campo=... if(OperType.equals("actualización")){ if(tipo de datos.equals("FECHA")){ updateSql+=fieldname+"=To_Date('" + sFieldValue + "','AAAA-MM-DD'),"; }de lo contrario si(Tipo de datos.equals("VARCHAR2") || Tipo de datos.equals("CHAR")){ updateSql+=fieldname+"='" + sFieldValue,1}+"',";}else /*NUMBER,FLOAT*/ updateSql+=fieldname+"="+sFieldValue+",;})) rs1.cerrar(); |
4) Genere una declaración SQL completa y ejecútela.
si(OperType.equals("insertar")) opSql=insSql1.substring(0, insSql1.length()-1)+")"+insSql2.substring(0, insSql2.length()-1)+""; si(OperType.equals("actualizar")) opSql=updateSql.substring(0, updateSql.length()-1)+" "+whereSql; if(OperType.equals("delete")) opSql="eliminar FROM "+nombretabla+" "+dóndeSql; //Se ha generado la sentencia SQL completa opSql intente {sqlnrows = Stmt.executeUpdate (opSql);} catch(SQLException e){out.println("SQLException: "+opSql);} |
4. Características:
este método utiliza este programa de manera uniforme para todos los formularios almacenados directamente. No es necesario desarrollar de forma independiente el programa correspondiente para cada formulario o cada tabla de datos. La carga de trabajo de desarrollo es muy pequeña y la llamada es muy simple. . Al mismo tiempo, cuando cambia la estructura de la tabla, no es necesario modificar el programa DBdataStore.jsp. Este programa también se puede reescribir como Servelet y el formato de llamada es <Form Name=Frm1 Method=Post Action="DBdataStoreServelet?tablename=table1&OperType=…">.
Conclusión
En una aplicación web, si los datos del formulario requieren una mayor verificación o procesamiento en el fondo del servidor después del envío, se debe utilizar el segundo método. Pero en muchos casos, los usuarios ingresan o modifican datos en el formulario, usan JavaScript para simplemente verificar o procesar los datos en el navegador de front-end y luego enviarlos, no se realiza ningún procesamiento en el servidor de back-end y los datos se envían. por el formulario se almacena directamente en la base de datos en una tabla. En este momento, utilizar el tercer método es muy simple y puede reducir en gran medida la carga de trabajo del desarrollador.