Résumé
Cet article prend la base de données Oracle comme exemple pour introduire une méthode simple et universelle de stockage et de traitement des données de formulaire lors du développement d'applications WEB utilisant la technologie JSP afin de réduire la charge de travail de développement et de fournir le code principal du programme.
Introduction
La technologie J2EE (Java 2 Enterprise Edition) a été largement utilisée dans le développement d'applications Web. Les technologies JavaBean et Servlet offrent aux développeurs un environnement de développement plus clair. La technologie JSP est utilisée pour afficher les pages, et la technologie Servlet est utilisée pour compléter un grand nombre de pages. processus métiers, utilisant des Beans pour stocker des données et certains traitements métiers. Dans les applications WEB, le travail de traitement consistant à stocker les données commerciales dans la base de données est souvent très ardu. L'un des principaux formulaires consiste à stocker les données du formulaire dans la base de données. L'ensemble du processus de traitement de l'application implique un grand nombre de ces opérations de stockage de données, et chacune d'elles. Le formulaire doit être traité. Il faut beaucoup de temps et d'énergie aux développeurs pour écrire séparément le programme de stockage de données correspondant. Quelles méthodes utiliser pour réduire la charge de travail de développement du stockage des données de formulaire est une question qui mérite d'être étudiée.
Deux méthodes courantes de stockage et de traitement des données de formulaire :
1. Écrivez le code de programme correspondant pour chaque formulaire
dans la page JSP ou JavaBean ou Servlet. Utilisez la fonction request.getparameter() pour extraire les données soumises par le formulaire une par une, ou écrivez le. JavaBean correspondant. Utilisez la méthode setProperty pour récupérer automatiquement les données dans le JavaBean, puis générez des instructions SQL (insertion, mise à jour, suppression) et enfin exécutez la fonctionexecuteupdate() pour terminer le stockage de la table de données.
2. Générez automatiquement un code de programme JavaBean pour chaque table de données.
Le système de base de données doit aider les utilisateurs à lire la structure de la table et à identifier les champs clés. Utilisez des outils de développement rapide orientés objet, tels que PowerBuilder, Delphi, etc., pour développer un programme de génération automatique de code Java. Dans ce programme, la structure de la table de la base de données est lue : le nom du champ, le type de données, la longueur des données et un code JavaBean est automatiquement généré. Dans ce code, définissez des variables portant les mêmes noms correspondant aux champs de la table, établissez les méthodes setValue et getValue pour toutes les variables et établissez les fonctions d'insertion, de mise à jour et de suppression pour gérer la génération et l'exécution d'instructions SQL pour l'insertion, la mise à jour, et supprimer respectivement.
Dans la page de traitement des données soumise par le formulaire, écrivez le code suivant pour stocker les données du formulaire dans JavaBean :
<jsp: useBean id="table" class="table1_bean" />
<jsp:setProperty name="table" property="*" />
(Remarque : table1_bean est le JavaBean généré automatiquement correspondant à une certaine table mentionnée ci-dessus)
Appelez ensuite les fonctions d'insertion, de mise à jour et de suppression dans table1_bean pour terminer le stockage de la table de données et renvoyer les résultats de l'exécution. comme:
<%boolean success =table.insert(); %>
La première méthode est simple et intuitive, mais vous devez écrire un programme de traitement de données correspondant pour chaque formulaire. Pour les applications légèrement plus volumineuses, le nombre de formulaires peut être important, ce qui entraîne une lourde charge de travail de développement et une faible efficacité de développement. Lorsque la structure du tableau change, par exemple en ajoutant ou en soustrayant des champs, le programme de traitement des données correspondant doit être modifié.
La deuxième méthode est beaucoup plus simple que la première. Le traitement des données de chaque table de données est implémenté par le JavaBean correspondant. Le JavaBean est automatiquement généré et n'a pas besoin d'être écrit. Lorsque la structure de la table change, il suffit d'en régénérer un nouveau. JavaBean et écrasez-le après la compilation avec Java. La classe Java d'origine peut être utilisée. Cependant, cette méthode nécessite le développement d'un programme de génération automatique de JavaBean, et les JavaBeans doivent être régénérés et compilés lorsque la structure de la table change.
Présentation d'une méthode simple et universelle pour stocker les données de formulaire
dans le développement d'applications WEB. De nombreux formulaires sont soumis au serveur backend après une simple vérification des données sur le navigateur frontal. Le serveur n'effectue aucun traitement sur les données et stocke directement les données dans. un tableau de base de données. Dans ce cas, nous pouvons simplement écrire un programme pour traiter ces formulaires de manière uniforme et stocker les données dans une table de données correspondante. Cette méthode nécessite également que le système de base de données prenne en charge la lecture de la structure des tables et l'identification des champs clés. Nous utilisons la technologie JSP pour écrire ce programme et le fichier programme s'appelle DbdataStore.jsp.
1. Format d'appel
La méthode d'appel Action du formulaire dans la page Web est la suivante :
<Form Name=Frm1 Method=Post Action="DBdataStore.jsp? tablename=table1&OperType=…">
table1 est le nom de la table de base de données où les données seront stockées et l'opération OperType Il existe trois types : insertion, mise à jour et suppression.
Les valeurs de nom dans <input type=text name=…>, <textarea name=…><select name=…> dans le formulaire doivent être les mêmes que les noms de champs de la table de données. Le formulaire est extrait un par un dans DBdataStore.jsp. Si aucune entrée n'est définie dans le formulaire et que la valeur résultante est une valeur nulle, le champ ne sera pas traité.
2. Définition de la vue en prenant Oracle comme exemple
1) Créer une vue de type de données pour chaque colonne de la table
CREATE OR REPLACE VIEW v_dbstru AS SELECT table_name, column_name, data_type, data_length, data_precision, data_scale, column_id
FROM all_tab_columns WHEREowner='user1'; //user1 est le propriétaire de la table de données.
2) Créez la vue colonne clé de la table
CREATE OR REPLACE VIEW v_pkey_column AS
SELECT b.nom_table, b.nom_colonne, b.position
DE 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. Code du programme principal
1) Initialisation du programme
String tablename=request.getParameter(" tablename"); //Extraire le nom de la table
String OperType=request.getParameter("OperType"); //Type d'opération d'extraction
String sFieldValue="";//Stockage de la valeur des données du champ soumise par le formulaire
String fieldname="", Datatype="" //Nom du champ de stockage, type de données du champ
int iFieldvalue=0 ;
Chaîne updateSql="", oùSql=" où ", insSql1="", insSql2="", opSql="", strSql="";
ResultSet rs1=null, rs2=null ;
insSql1="insérer dans "+tablename+" (";
insSql2="values(";
2) Générez la partie champ clé de l'instruction SQL
etgénérez
la partie champ clé de l'instruction d'insertion, par exemple : insérer dans table1 (id et valeurs (100)) ;
générer l'instruction de mise à jour et de suppression où les parties , telles que : où id=100 ;
lorsque le type d'opération est mise à jour, les données des champs clés ne seront pas modifiées dans le formulaire Web.
rs1=Stmt.executeQuery("SELECT column_name FROM v_pkey_column WHERE table_name='"+tablename+"'"); //Obtenir le nom du champ clé
tandis que(rs1.next()){
fieldname=rs1.getString("nom_colonne");
rs2=Stmt.executeQuery("SELECT data_type FROM v_dbstru WHERE table_name='"+tablename+"' AND column_name='"+fieldname+"'"); //Obtenir le type de données du champ clé if(rs2.next()){
Datatype=rs2.getString("data_type");
sFieldValue=request.getParameter(fieldname.toLowerCase());
//Générer la partie champ clé de l'instruction d'insertion if(OperType.equals("insert")){
insSql1+=nom du champ+",";
if((sFieldValue==null) ){
//Lorsque la valeur des données du champ clé n'est pas soumise dans le formulaire, cet article la traitera uniquement comme un type numérique et la valeur des données sera calculée en fonction du numéro de série.
rs2= Stmt.executQuery("SELECT max("+fieldname+")+1 FROM "+tablename next(); ; }else if(Datatype.equals("DATE")){
insSql2+= "To_Date('" + sFieldValue + "','AAAA-MM-JJ'),";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
insSql2+="'" + sFieldValue+"',";}
sinon /*NUMBER, FLOAT */ insSql2+=sFieldValue+","}
// Génère une instruction de mise à jour et de suppression où part : où nom de champ =... ET
if(OperType.equals("update") || OperType.equals("delete")){
if(Datatype.equals("DATE")){
oùSql+=fieldname+"=To_Date('" + sFieldValue + "','YYYY-MM-DD') AND ";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
oùSql+=nom du champ+"='" + sFieldValue+"' ET ";}
else /*NUMBER, FLOAT */whereSql+=fieldname+"="+ sFieldValue+" AND ";}
}
}
whereSql=whereSql.substring(0,whereSql.length()-4);
3) L'instruction SQL de la partie champ non clé génère
une instruction de mise à jour, telle que : update table1 set column1=value1,...where id= 100
instructions d'insertion, telles que : insert into table1(id, column1,…)values(100, value1,…)
updateSql="update "+tablename+" set ";
strSql="SELECT column_name, data_type, data_length, data_precision, data_scale FROM v_dbstru a "+"where table_name='"+tablename+"' ET a.column_name pas dans (SELECT b.column_name FROM v_pkey_column b où b.table_name=a.table_name )" ;
rs1=Stmt.executeQuery(strSql); //Obtenir le nom du champ et le type de données des champs non clés
tandis que(rs1.next()){
fieldname=rs1.getString("column_name"); Datatype=rs1.getString("data_type"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //Si le formulaire ne soumet pas la valeur du champ, ignorez-le. le champ Traitement if((sFieldValue!=null)){
//Générer l'instruction d'insertion =insSql1+insSql2, c'est-à-dire insérer dans le nom de la table(… et les valeurs(…)
if(OperType.equals("insert")){ insSql1+=fieldname+",";
if(Datatype.equals("DATE")){
insSql2+= "To_Date('" + sFieldValue + "','AAAA-MM-JJ'),";
} sinon if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
insSql2+="'" + sFieldValue+"',";}else /*NUMBER,FLOAT*/ insSql2+= sFieldValue+",";}
//Générer l'instruction de mise à jour=updateSql+whereSql, c'est-à-dire mettre à jour l'ensemble de noms de table... où fieldname=... if(OperType.equals("update")){
if(Datatype.equals("DATE")){
updateSql+=fieldname+"=To_Date('" + sFieldValue + "','AAAA-MM-JJ'),";
}else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){
updateSql+=fieldname+"='" + sFieldValue,1}+"',";}else /*NUMBER,FLOAT*/ updateSql+=fieldname+"="+sFieldValue+",";}))
rs1.close();
4) Générez une instruction SQL complète et exécutez
if(OperType.equals("insert"))
opSql=insSql1.substring(0, insSql1.length()-1)+")"+insSql2.substring(0, insSql2.length()-1)+"";
if(OperType.equals("mise à jour"))
opSql=updateSql.substring(0, updateSql.length()-1)+" "+whereSql; if(OperType.equals("delete"))
opSql="supprimer FROM "+tablename+" "+whereSql;
// L'instruction SQL complète opSql a été générée
essayez{sqlnrows=Stmt.executeUpdate(opSql);}
catch(SQLException e){out.println("SQLException:"+opSql);}
4. Fonctionnalités
Cette méthode utilise ce programme de manière uniforme pour tous ces formulaires stockés directement. Elle est universelle et n'a pas besoin d'être utilisée pour chaque formulaire ou pour chaque. Le programme correspondant est développé indépendamment pour la table de données. La charge de travail de développement est très faible et l'appel est très simple. Dans le même temps, lorsque la structure de la table change, il n'est pas nécessaire de modifier le programme DBdataStore.jsp. Ce programme peut également être réécrit en Servelet, et le format d'appel est <Form Name=Frm1 Method=Post Action="DBdataStoreServelet?tablename=table1&OperType=…">.
Conclusion
Dans une application Web, si les données du formulaire nécessitent une vérification ou un traitement supplémentaire des données en arrière-plan du serveur après leur soumission, la deuxième méthode doit être utilisée. Mais dans de nombreux cas, les utilisateurs saisissent ou modifient des données dans le formulaire, utilisent JavaScript pour simplement vérifier ou traiter les données sur le navigateur frontal, puis les soumettent. Aucun traitement n'est effectué sur le serveur principal et les données sont soumises. par le formulaire est directement stocké dans la base de données dans une table. À l'heure actuelle, l'utilisation de la troisième méthode est très simple et peut réduire considérablement la charge de travail du développeur.