Zusammenfassung In diesem Artikel wird die Oracle-Datenbank als Beispiel verwendet, um eine einfache und universelle Methode zur Speicherung und Verarbeitung von Formulardaten bei der Entwicklung von WEB-Anwendungen mithilfe der JSP-Technologie vorzustellen, um den Entwicklungsaufwand zu reduzieren und den Hauptprogrammcode bereitzustellen. Einführung Die J2EE-Technologie (Java 2 Enterprise Edition) ist in der Webanwendungsentwicklung weit verbreitet. Die JavaBean- und Servlet-Technologien bieten Entwicklern eine klarere Entwicklungsumgebung, und die Servlet-Technologie wird zum Vervollständigen einer großen Anzahl von Seiten verwendet Geschäftsprozesse, Verwendung von Beans zum Speichern von Daten und einigen Geschäftsverarbeitungen. In WEB-Anwendungen ist die Verarbeitung von Geschäftsdaten in der Datenbank oft sehr mühsam. Eines der Hauptformulare ist das Speichern von Formulardaten in der Datenbank. Der gesamte Anwendungsverarbeitungsprozess umfasst eine große Anzahl solcher Datenspeichervorgänge Das Formular muss verarbeitet werden. Es kostet Entwickler viel Zeit und Energie, das entsprechende Datenspeicherprogramm separat zu schreiben. Es lohnt sich, die Frage zu untersuchen, mit welchen Methoden der Entwicklungsaufwand für die Formulardatenspeicherung verringert werden kann. Zwei gängige Methoden zur Speicherung und Verarbeitung von Formulardaten: 1. Schreiben Sie den entsprechenden Programmcode für jedes Formular in die JSP-Seite oder in JavaBean oder Servlet. Verwenden Sie die Funktion request.getparameter(), um die vom Formular übermittelten Daten einzeln zu extrahieren, oder schreiben Sie die Verwenden Sie die setProperty-Methode, um die Daten automatisch in die JavaBean abzurufen, generieren Sie dann SQL-Anweisungen (Einfügen, Aktualisieren, Löschen) und führen Sie schließlich die Funktion „executeupdate()“ aus, um die Datentabellenspeicherung abzuschließen. 2. Generieren Sie automatisch einen JavaBean-Programmcode für jede Datentabelle. Das Datenbanksystem muss Benutzer dabei unterstützen, die Tabellenstruktur zu lesen und Schlüsselfelder zu identifizieren. Verwenden Sie objektorientierte Schnellentwicklungstools wie PowerBuilder, Delphi usw., um ein Programm zur automatischen Generierung von Java-Code zu entwickeln. In diesem Programm wird die Struktur der Datenbanktabelle gelesen: Feldname, Datentyp, Datenlänge und automatisch ein JavaBean-Code generiert. Definieren Sie in diesem Code Variablen mit denselben Namen, die den Feldern in der Tabelle entsprechen, richten Sie die Methoden setValue und getValue für alle Variablen ein und richten Sie Einfüge-, Aktualisierungs- und Löschfunktionen ein, um die Generierung und Ausführung von SQL-Anweisungen zum Einfügen, Aktualisieren, bzw. löschen. Schreiben Sie auf der vom Formular übermittelten Datenverarbeitungsseite den folgenden Code, um die Formulardaten in JavaBean zu speichern: <jsp: useBean id="table" class="table1_bean" /> <jsp: setProperty name="table" property=" * " /> (Hinweis: table1_bean ist das oben erwähnte automatisch generierte JavaBean, das einer bestimmten Tabelle entspricht) und ruft dann die Einfüge-, Aktualisierungs- und Löschfunktionen in table1_bean auf, um die Datentabellenspeicherung abzuschließen und die Ausführungsergebnisse zurückzugeben. Beispiel: <%boolean success =table.insert(); Die erste Methode ist einfach und intuitiv, erfordert jedoch das Schreiben entsprechender Datenverarbeitungsprozeduren für jedes Formular. Bei etwas größeren Anwendungen kann die Anzahl der Formulare groß sein, was zu einem hohen Entwicklungsaufwand und einer geringen Entwicklungseffizienz führt. Wenn sich die Tabellenstruktur ändert, beispielsweise das Hinzufügen oder Entfernen von Feldern, muss das entsprechende Datenverarbeitungsprogramm geändert werden. Die zweite Methode ist viel einfacher als die erste. Die Datenverarbeitung jeder Datentabelle wird automatisch generiert und muss nicht neu geschrieben werden JavaBean und überschreiben Sie es nach dem Kompilieren mit Java. Die ursprüngliche Java-Klasse kann verwendet werden. Diese Methode erfordert jedoch die Entwicklung eines automatischen JavaBean-Generierungsprogramms, und JavaBeans müssen neu generiert und kompiliert werden, wenn sich die Tabellenstruktur ändert. Einführung einer einfachen und universellen Methode zum Speichern von Formulardaten bei der Entwicklung von WEB-Anwendungen. Viele Formulare werden nach einer einfachen Datenüberprüfung im Front-End-Browser an den Backend-Server übermittelt. Der Server führt keine Verarbeitung der Daten durch und speichert die Daten direkt darin eine Datenbank. In diesem Fall können wir einfach ein Programm schreiben, um diese Formulare einheitlich zu verarbeiten und die Daten in einer entsprechenden Datentabelle zu speichern. Diese Methode erfordert außerdem, dass das Datenbanksystem das Lesen der Tabellenstruktur und die Identifizierung von Schlüsselfeldern unterstützt. Wir verwenden JSP-Technologie, um dieses Programm zu schreiben, und die Programmdatei heißt DbdataStore.jsp. 1. Aufrufformat Die Aktionsaufrufmethode des Formulars auf der Webseite lautet wie folgt: <Form Name=Frm1 Method=Post Action="DBdataStore.jsp? tablename=table1&OperType=…"> table1 ist der Tabellenname der Datenbanktabelle wo die Daten gespeichert werden und die OperType-Operation Es gibt drei Typen: Einfügen, Aktualisieren und Löschen. Die Namenswerte in <input type=text name=…>, <textarea name=…><select name=…> im Formular sollten mit den Feldnamen der Datentabelle übereinstimmen Formulare werden einzeln in DBdataStore.jsp extrahiert. Wenn im Formular keine Eingabe definiert ist und der resultierende Wert ein Nullwert ist, wird das Feld nicht verarbeitet. 2. Ansichtsdefinition am Beispiel von Oracle 1) Erstellen Sie eine Datentypansicht für jede Spalte der Tabelle. CREATE OR REPLACE VIEW v_dbstru AS SELECT table_name, columns_name, data_type, data_length, data_precision, data_scale, columns_id FROM all_tab_columns WHEREowner='user1' ; //user1 Der Besitzer der Datentabelle sein. 2) Erstellen Sie die Schlüsselspaltenansicht der Tabelle. 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 AND a .owner='user1' AND a.constraint_type='P'; |
3. Hauptprogrammcode
1) Programminitialisierung
String tablename=request.getParameter("tablename"); //Tabellennamen extrahieren
String OperType=request.getParameter("OperType");/Operationstyp extrahieren
String sFieldValue="";/ /Speichern des vom Formular übermittelten Felddatenwerts
String fieldname="", Datatype="" //Speichern des Feldnamens, Felddatentyp
int iFieldvalue=0;
String updateSql="", whereSql=" where ", insSql1=" ", insSql2 ="", opSql="", strSql ="";
ResultSet rs1=null, rs2=null;
insSql1="insert into "+tablename+" (";
insSql2="values(";
2) SQL-Anweisung generieren Schlüsselfelder
Generieren Sie teilweise den Schlüsselfeldteil der Einfügeanweisung, z. B.: Einfügen in Tabelle1 (ID und Werte (100));
Verwenden Sie nur die Schlüsselfelder, um die Aktualisierungs- und Löschanweisung zu generieren, z ;
Wenn der Vorgangstyp „Aktualisieren“ lautet, werden die Daten der Schlüsselfelder im Webformular nicht geändert.
rs1=Stmt.executeQuery("SELECT columns_name FROM v_pkey_column WHERE table_name='"+tablename+"'"); //Den Schlüsselfeldnamen abrufen while(rs1.next()){ fieldname=rs1.getString("column_name"); rs2=Stmt.executeQuery("SELECT data_type FROM v_dbstru WHERE table_name='"+tablename+"' AND columns_name='"+fieldname+"'"); //Den Schlüsselfeld-Datentyp abrufen if(rs2.next()){ Datentyp=rs2.getString("data_type"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //Generieren Sie den Schlüsselfeldteil der Einfügeanweisung if(OperType.equals("insert")){ insSql1+=fieldname+","; if((sFieldValue==null) ){ //Wenn der Datenwert des Schlüsselfelds nicht im Formular übermittelt wird, wird er in diesem Artikel nur als numerischer Typ verarbeitet und der Datenwert wird anhand der Seriennummer berechnet. 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 + "','YYYY-MM-DD'),"; }else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){ insSql2+="'" + sFieldValue+"',";} else /*NUMBER, FLOAT */ insSql2+=sFieldValue+","} //Aktualisierungs- und Löschanweisung generieren, wobei Teil: wobei Feldname=... UND if(OperType.equals("update") || OperType.equals("delete")){ if(Datatype.equals("DATE")){ whereSql+=fieldname+"=To_Date('" + sFieldValue + "','YYYY-MM-DD') AND "; }else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){ whereSql+=fieldname+"='" + sFieldValue+"' AND ";} else /*NUMBER, FLOAT */ whereSql+=fieldname+"="+ sFieldValue+" AND ";} } } whereSql=whereSql.substring(0, whereSql.length()-4); |
3) Der Nicht-Schlüsselfeld-Teil der SQL-Anweisung generiert
eine Aktualisierungsanweisung, wie zum Beispiel: update table1 set columns1=value1,… where id=100
insert Statement, wie zum Beispiel: insert into table1 (id, columns1,…) Values (100, Wert1,…)
updateSql="update "+tablename+" set "; strSql="SELECT Spaltenname, Datentyp, Datenlänge, Datengenauigkeit, Datenskala FROM v_dbstru a "+"where table_name='"+tablename+"' AND a.column_name nicht in (SELECT b.column_name FROM v_pkey_column b where b.table_name=a.table_name)"; rs1=Stmt.executeQuery(strSql); //Erhalten Sie den Feldnamen und den Datentyp des Nicht-Schlüsselfelds while(rs1.next()){ fieldname=rs1.getString("column_name"); Datatype=rs1.getString("data_type"); sFieldValue=request.getParameter(fieldname.toLowerCase()); //Wenn das Formular den Wert dieses Feldes nicht übermittelt, ignorieren Sie die Verarbeitung dieses Feldes if((sFieldValue!=null)){ //Einfügeanweisung generieren =insSql1+insSql2, also in Tabellenname(… und Werte(…) einfügen if(OperType.equals("insert")){ insSql1+=fieldname+","; if(Datatype.equals("DATE")){ insSql2+= "To_Date('" + sFieldValue + "','YYYY-MM-DD'),"; } else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){ insSql2+="'" + sFieldValue+"',";}else /*NUMBER,FLOAT*/ insSql2+= sFieldValue+",";} //Aktualisierungsanweisung generieren =updateSql+whereSql, also Tabellennamensatz aktualisieren ... wo fieldname=... if(OperType.equals("update")){ if(Datatype.equals("DATE")){ updateSql+=fieldname+"=To_Date('" + sFieldValue + "','YYYY-MM-DD'),"; }else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){ updateSql+=fieldname+"='" + sFieldValue,1}+"',";}else /*NUMBER,FLOAT*/ updateSql+=fieldname+"="+sFieldValue+",";})) rs1.close(); |
4) Generieren Sie eine vollständige SQL-Anweisung und führen Sie sie aus
if(OperType.equals("insert")) opSql=insSql1.substring(0, insSql1.length()-1)+")"+insSql2.substring(0, insSql2.length()-1)+""; if(OperType.equals("update")) opSql=updateSql.substring(0, updateSql.length()-1)+" "+whereSql; if(OperType.equals("delete")) opSql="delete FROM "+tablename+" "+whereSql; //Die vollständige SQL-Anweisung opSql wurde generiert try{sqlnrows=Stmt.executeUpdate(opSql);} Catch(SQLException e){out.println("SQLException: "+opSql);} |
4. Merkmale:
Diese Methode verwendet dieses Programm einheitlich für alle direkt gespeicherten Formulare. Es ist nicht erforderlich, für jedes Formular oder jede Datentabelle ein eigenes Programm zu entwickeln. Der Entwicklungsaufwand ist sehr gering . Wenn sich gleichzeitig die Tabellenstruktur ändert, muss das Programm DBdataStore.jsp nicht geändert werden. Dieses Programm kann auch als Servelet umgeschrieben werden und das Aufrufformat ist <Form Name=Frm1 Method=Post Action="DBdataStoreServelet?tablename=table1&OperType=…">.
Fazit
Wenn in einer Webanwendung die Formulardaten nach der Übermittlung eine weitere Datenüberprüfung oder -verarbeitung im Serverhintergrund erfordern, muss die zweite Methode verwendet werden. In vielen Fällen geben Benutzer jedoch Daten in das Formular ein oder ändern sie, verwenden JavaScript, um die Daten einfach im Front-End-Browser zu überprüfen oder zu verarbeiten, und übermitteln sie dann. Es erfolgt keine Verarbeitung auf dem Back-End-Server und die übermittelten Daten durch das Formular wird direkt in der Datenbank in einer Tabelle gespeichert. Derzeit ist die Verwendung der dritten Methode sehr einfach und kann die Arbeitsbelastung des Entwicklers erheblich reduzieren.