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 nombre="table" property="*" />
(Nota: table1_bean es el JavaBean generado automáticamente correspondiente a una determinada tabla mencionada anteriormente)
Luego llame 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. como:
<%boolean Success =table.insert(); %>
El primer método es simple e intuitivo, pero necesita escribir un programa de procesamiento de datos correspondiente 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 VER v_dbstru COMO SELECCIONAR nombre_tabla, nombre_columna, tipo_datos, longitud_datos, precisión_datos, escala_datos, id_columna
FROM all_tab_columns WHERE propietario='usuario1'; //usuario1 es el propietario de la tabla de datos.
2) Cree la vista de columna clave de la tabla
CREAR O REEMPLAZAR VISTA v_pkey_column AS
SELECCIONE b.nombre_tabla, b.nombre_columna, b.posición
DESDE all_constraints a, all_cons_columns b
DONDE a.owner=b.owner AND a.constraint_name=b.constraint_name AND a.owner='user1' AND a.constraint_type='P'
3. Código del programa principal
1) Inicialización del programa
String tablename=request.getParameter(" tablename"); //Extrae el nombre de la tabla
String OperType=request.getParameter("OperType"); //Extraer tipo de operación
String sFieldValue="";//Almacenar el valor de datos del campo enviado por el formulario
String fieldname="", Datatype="" //Nombre del campo de almacenamiento, tipo de datos del campo
int iFieldvalue=0;
String updateSql="", dondeSql=" donde ", insSql1="", insSql2="", opSql="", strSql="";
Conjunto de resultados rs1=nulo, rs2=nulo;
insSql1="insertar en "+nombretabla+" (";
insSql2="values(";
2) Genere la parte del campo clave de la declaración SQL
ygenere
la parte del campo clave de la declaración de inserción, como por ejemplo: insertar en la tabla1 (id y valores (100));
generar la declaración de actualización y eliminación donde partes, como por ejemplo: donde id=100
cuando se actualiza el tipo de operación, los datos de los campos clave no se modificarán en el formulario web.
rs1=Stmt.executeQuery("SELECT column_name FROM v_pkey_column WHERE table_name='"+tablename+"'" //Obtener el nombre del campo clave
mientras(rs1.siguiente()){
nombre de campo = rs1.getString ("nombre_columna");
rs2=Stmt.executeQuery("SELECT data_type FROM v_dbstru WHERE table_name='"+tablename+"' AND column_name='"+fieldname+"'" //Obtener 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.executQuery("SELECT max("+nombre de campo+")+1 FROM "+nombre de tabla(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 declaración SQL de la parte del campo no clave genera
una declaración de actualización, como por ejemplo: actualizar tabla1 establecer columna1=valor1,... donde id= 100
instrucciones de inserción, como por ejemplo: insertar en tabla1 (id, columna1,…) valores (100, valor1,…)
updateSql="update "+tablename+" set ";
strSql="SELECCIONE nombre_columna, tipo_datos, longitud_datos, precisión_datos, escala_datos DESDE v_dbstru a "+"donde nombre_tabla='"+nombre_tabla+"' Y a.nombre_columna no en (SELECCIONE b.nombre_columna DESDE v_pkey_columna b donde b.nombre_tabla=a.nombre_tabla )";
rs1=Stmt.executeQuery(strSql); //Obtener el nombre del campo y el tipo de datos de los campos que no son clave
mientras(rs1.siguiente()){
fieldname=rs1.getString("column_name"); Datatype=rs1.getString("data_type"); sFieldValue=request.getParameter(fieldname.toLowerCase()); el campo Procesando 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("update")){
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.close();
4) Genere una declaración SQL completa y ejecute
if(OperType.equals("insert"))
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. Es universal y no es necesario usarlo para todos los formularios ni para todos. formulario El programa correspondiente se desarrolla de forma independiente para la 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.