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 mentionné ci-dessus correspondant à une certaine table) , puis appelle 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 d'exécution. Par exemple : <%boolean success =table.insert(); %> La première méthode est simple et intuitive, mais elle nécessite d'écrire des procédures de traitement de données correspondantes 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 Être le propriétaire de la table de données. 2) Créez la vue des colonnes clés de la table 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 AND a.constraint_name=b.constraint_name ET un .owner='user1' ET un.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"); //Extraire le type d'opération
String sFieldValue="";/ /Stockage de la valeur des données de champ soumise par le formulaire
String fieldname="", Datatype="" //Stockage du nom du champ, type de données de champ
int iFieldvalue=0;
String updateSql="",whereSql="where ", insSql1=" ", insSql2 ="", opSql="", strSql ="";
ResultSet rs1=null, rs2=null;
insSql1="insérer dans "+tablename+" (";
insSql2="values(";
2) Générer une instruction SQL champs clés Générez partiellement
la partie champ clé de l'instruction d'insertion, par exemple : insert into table1(id et valeurs (100));
utilisez uniquement les champs clés pour générer l'instruction de mise à jour et de suppression, par exemple : 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 nom_colonne FROM v_pkey_column WHERE nom_table='"+nom_table+"'"); //Obtenir le nom du champ clé while(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.executeQuery("SELECT max("+fieldname+")+1 FROM "+tablename); rs2.next();iFieldvalue=rs2.getInt(1);insSql2+=Integer.toString(iFieldvalue)+","; }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 ";} } } oùSql=whereSql.substring(0,whereSql.length()-4); |
3) La partie champ non clé de l'instruction SQL génère
une instruction de mise à jour, telle que : update table1 set column1=value1,… où id=100
insert instruction, telle que : insert into table1 (id, column1,…) valeurs (100, valeur1,…)
updateSql="update "+tablename+" set "; strSql="SELECT nom_colonne, type_données, longueur_données, précision_données, échelle_données FROM v_dbstru a "+"où table_name='"+tablename+"' ET a.column_name n'est 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 non clé et le type de données while(rs1.next()){ fieldname=rs1.getString("nom_colonne"); Type de données=rs1.getString("type_données"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //Si le formulaire ne soumet pas la valeur de ce champ, ignorez le traitement de ce champ 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+=nom du champ+"='" + sFieldValue,1}+"',";}else /*NUMBER,FLOAT*/ updateSql+=fieldname+"="+sFieldValue+",";})) rs1.close(); |
4) Générez une instruction SQL complète et exécutez-la
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. Caractéristiques :
Cette méthode utilise ce programme de manière uniforme pour tous ces formulaires directement stockés. Il n'est pas nécessaire de développer indépendamment des programmes correspondants pour chaque formulaire ou chaque 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.