Abstrak Artikel ini mengambil database Oracle sebagai contoh untuk memperkenalkan metode penyimpanan dan pemrosesan data berbentuk sederhana dan universal ketika mengembangkan aplikasi WEB menggunakan teknologi JSP untuk mengurangi beban kerja pengembangan dan menyediakan kode program utama. Pendahuluan Teknologi J2EE (Java 2 Enterprise Edition) telah banyak digunakan dalam pengembangan aplikasi Web. Teknologi JavaBean dan Servlet memberi pengembang lingkungan pengembangan yang lebih jelas. Teknologi JSP digunakan untuk menampilkan halaman, dan teknologi Servlet digunakan untuk menyelesaikan sejumlah besar proses bisnis. , menggunakan Beans untuk menyimpan data dan beberapa pemrosesan bisnis. Dalam aplikasi WEB, pekerjaan pemrosesan penyimpanan data bisnis dalam database seringkali sangat sulit. Salah satu bentuk utama adalah menyimpan data formulir dalam database. Seluruh proses pemrosesan aplikasi melibatkan sejumlah besar operasi penyimpanan data, dan masing-masing formulir perlu diproses. Pengembang membutuhkan banyak waktu dan energi untuk menulis program penyimpanan data yang sesuai secara terpisah. Metode apa yang digunakan untuk mengurangi beban kerja pengembangan penyimpanan data formulir adalah pertanyaan yang patut dipelajari. Dua metode penyimpanan dan pemrosesan data formulir yang umum: 1. Tulis kode program yang sesuai untuk setiap formulir di halaman JSP atau JavaBean atau Servlet. Gunakan fungsi request.getparameter() untuk mengekstrak data yang dikirimkan oleh formulir satu per satu, atau tulis JavaBean yang sesuai. Gunakan metode setProperty untuk mengambil data secara otomatis ke dalam JavaBean, lalu buat pernyataan SQL (sisipkan, perbarui, hapus), dan terakhir jalankan fungsi eksekusiupdate() untuk menyelesaikan penyimpanan tabel data. 2. Secara otomatis menghasilkan kode program JavaBean untuk setiap tabel data. Sistem database harus mendukung pengguna untuk membaca struktur tabel dan mengidentifikasi bidang kunci. Gunakan alat pengembangan cepat berorientasi objek, seperti PowerBuilder, Delphi, dll., untuk mengembangkan program pembuatan kode Java secara otomatis. Dalam program ini, struktur tabel database dibaca: nama field, tipe data, panjang data, dan kode JavaBean dibuat secara otomatis. Dalam kode ini, tentukan variabel dengan nama yang sama sesuai dengan bidang dalam tabel, buat metode setValue dan getValue untuk semua variabel, dan buat fungsi penyisipan, perbarui, dan hapus untuk menangani pembuatan dan eksekusi pernyataan SQL untuk penyisipan, pembaruan, dan hapus masing-masing. Pada halaman pemrosesan data yang dikirimkan oleh form, tulis kode berikut untuk menyimpan data form di JavaBean: <jsp: useBean id="table" class="table1_bean" /> <jsp: setProperty name="table" property=" * " /> (Catatan: table1_bean adalah JavaBean yang dihasilkan secara otomatis sesuai dengan tabel tertentu yang disebutkan di atas) dan kemudian memanggil fungsi sisipkan, perbarui, dan hapus di table1_bean untuk menyelesaikan penyimpanan tabel data dan mengembalikan hasil eksekusi. Misalnya: <%boolean sukses =table.insert(); Metode pertama sederhana dan intuitif, namun memerlukan penulisan prosedur pemrosesan data yang sesuai untuk setiap formulir. Untuk aplikasi yang sedikit lebih besar, jumlah formulir mungkin banyak, sehingga mengakibatkan beban kerja pengembangan yang berat dan efisiensi pengembangan yang rendah. Ketika struktur tabel berubah, seperti menambah atau mengurangi bidang, program pemrosesan data terkait perlu dimodifikasi. Metode kedua jauh lebih sederhana daripada yang pertama. Pemrosesan data setiap tabel data diimplementasikan oleh JavaBean yang sesuai. JavaBean dibuat secara otomatis dan tidak perlu ditulis ketika struktur tabel berubah, Anda hanya perlu membuat ulang yang baru JavaBean dan timpa setelah dikompilasi dengan Java. Kelas java asli dapat digunakan. Namun, metode ini memerlukan pengembangan program pembuatan otomatis JavaBean, dan JavaBeans perlu dibuat ulang dan dikompilasi ketika struktur tabel berubah. Memperkenalkan metode sederhana dan universal untuk menyimpan data formulir dalam pengembangan aplikasi WEB. Banyak formulir dikirimkan ke server backend setelah verifikasi data sederhana di browser front-end sebuah tabel data. Dalam hal ini, kita cukup menulis sebuah program untuk memproses formulir-formulir ini secara seragam dan menyimpan data dalam tabel data yang sesuai. Metode ini juga memerlukan sistem database untuk mendukung pembacaan struktur tabel dan identifikasi field kunci. Kami menggunakan teknologi JSP untuk menulis program ini, dan file program diberi nama DbdataStore.jsp. 1. Format pemanggilan Metode pemanggilan Action form pada halaman web adalah sebagai berikut: <Form Name=Frm1 Method=Post Action="DBdataStore.jsp? tablename=table1&OperType=..."> table1 adalah nama tabel dari tabel database dimana data akan disimpan, dan operasi OperType Ada tiga jenis: menyisipkan, memperbarui, dan menghapus. Nilai nama di <input type=text name=…>, <textarea name=…><select name=…> di formulir harus sama dengan nama field pada tabel data formulir diekstraksi satu per satu di DBdataStore.jsp Jika tidak ada input yang ditentukan dalam formulir dan nilai yang dihasilkan adalah nilai nol, bidang tersebut tidak akan diproses. 2. Lihat definisi dengan mengambil Oracle sebagai contoh 1) Buat tampilan tipe data untuk setiap kolom tabel 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 WHERE owner='user1' ; //pengguna1 Menjadi pemilik tabel data. 2) Buat tampilan kolom kunci dari tabel 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 DAN a .owner='user1' DAN a.constraint_type='P'; |
3. Kode program utama
1) Inisialisasi program
String tablename=request.getParameter("tablename"); //Ekstrak nama tabel
String OperType=request.getParameter("OperType"); //Ekstrak tipe operasi
String sFieldValue="";/ /Menyimpan nilai data field yang dikirimkan oleh form
String fieldname=
"", Datatype="" //Menyimpan nama field, tipe data field
int iFieldvalue=0;
", insSql2 ="", opSql="", strSql ="";
ResultSet rs1=null, rs2=null;
insSql1="masukkan ke dalam "+namatabel+" ("";
insSql2="values(";
2) Menghasilkan pernyataan sql bidang kunci
Buat sebagian bagian bidang kunci dari pernyataan penyisipan, seperti: masukkan ke dalam tabel1(id dan nilai(100));
hanya gunakan bidang kunci untuk menghasilkan pernyataan pembaruan dan penghapusan bagian mana, seperti: di mana id=100 ;
ketika jenis operasi diperbarui, Data bidang kunci tidak akan diubah dalam formulir web.
rs1=Stmt.executeQuery("PILIH nama_kolom FROM v_pkey_column WHERE nama_tabel='"+namatabel+"'"); //Dapatkan nama field kunci while(rs1.next()){ namabidang=rs1.getString("nama_kolom"); rs2=Stmt.executeQuery("PILIH tipe_data DARI v_dbstru WHERE nama_tabel='"+namatabel+"' DAN nama_kolom='"+namabidang+"'"); //Dapatkan tipe data bidang kunci if(rs2.next()){ Tipe Data=rs2.getString("tipe_data"); sFieldValue=permintaan.getParameter(namabidang.toLowerCase()); //Buat bagian bidang kunci dari pernyataan penyisipan if(OperType.equals("insert")){ insSql1+=nama bidang+""; jika((sFieldValue==null) ){ //Bila nilai data field kunci tidak dikirimkan dalam formulir, artikel ini hanya akan memprosesnya sebagai tipe numerik, dan nilai data akan dihitung sesuai dengan nomor seri. rs2= Stmt.executeQuery("PILIH maks("+namabidang+")+1 DARI "+namatabel); rs2.next();iFieldvalue=rs2.getInt(1);insSql2+=Integer.toString(iFieldvalue)+""; }else if(Datatype.equals("DATE")){ insSql2+= "Sampai_Tanggal('" + sFieldValue + "','YYYY-MM-DD'),"; }else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){ insSql2+="'" + sFieldValue+"',";} lain /*NUMBER, FLOAT */ insSql2+=sFieldValue+","} //Buat pembaruan dan hapus pernyataan di mana bagian: di mana nama bidang=... DAN if(OperType.equals("update") || OperType.equals("hapus")){ if(Tipe data.sama dengan("TANGGAL")){ di manaSql+=namabidang+"=Tanggal_Sampai('" + sFieldValue + "','YYYY-MM-DD') DAN "; }else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){ di manaSql+=namabidang+"='" + sFieldValue+"' DAN ";} else /*NUMBER, FLOAT */ WhereSql+=fieldname+"="+ sFieldValue+" AND ";} } } dimanaSql=whereSql.substring(0, dimanaSql.panjang()-4); |
3) Bagian bidang non-kunci dari pernyataan SQL menghasilkan
pernyataan pembaruan, seperti: perbarui tabel1 set kolom1=nilai1,… di mana id=100
masukkan pernyataan, seperti: masukkan ke dalam tabel1 (id, kolom1,…) nilai (100, nilai1,…)
updateSql="perbarui "+namatabel+" set "; strSql="PILIH nama_kolom, tipe_data, panjang_data, presisi_data, skala_data DARI v_dbstru a "+"dimana nama_tabel='"+namatabel+"' DAN a.column_name tidak ada di (PILIH b.nama_kolom FROM v_pkey_column b di mana b.nama_tabel=a.nama_tabel)"; rs1=Stmt.executeQuery(strSql); //Dapatkan nama kolom non-kunci dan tipe data while(rs1.next()){ namabidang=rs1.getString("nama_kolom");Tipe Data=rs1.getString("tipe_data"); sFieldValue=permintaan.getParameter(namabidang.toLowerCase()); //Jika formulir tidak mengirimkan nilai bidang ini, abaikan pemrosesan bidang ini if((sFieldValue!=null)){ //Buat pernyataan penyisipan =insSql1+insSql2, yaitu, masukkan ke nama tabel(… dan nilai(…) if(OperType.equals("insert")){ insSql1+=fieldname+""; if(Tipe data.sama dengan("TANGGAL")){ insSql2+= "Sampai_Tanggal('" + sFieldValue + "','YYYY-MM-DD'),"; } else if(Tipe Data.sama dengan("VARCHAR2") || Tipe Data.sama dengan("CHAR")){ insSql2+="'" + sFieldValue+"',";}else /*NUMBER,FLOAT*/ insSql2+= sFieldValue+",";} //Buat pernyataan pembaruan =updateSql+whereSql, yaitu, perbarui kumpulan nama tabel ... di mana nama bidang=... if(OperType.equals("update")){ if(Tipe data.sama dengan("TANGGAL")){ updateSql+=fieldname+"=To_Date('" + sFieldValue + "','YYYY-MM-DD'),"; }else if(Datatype.equals("VARCHAR2") || Datatype.equals("CHAR")){ updateSql+=namabidang+"='" + sFieldValue,1}+"',";}else /*NUMBER,FLOAT*/ updateSql+=namabidang+"="+sFieldValue+",";})) rs1.close(); |
4) Hasilkan pernyataan sql lengkap dan jalankan
if(OperType.equals("masukkan")) opSql=insSql1.substring(0, insSql1.length()-1)+")"+insSql2.substring(0, insSql2.length()-1)+")"; if(OperType.equals("perbarui")) opSql=updateSql.substring(0, updateSql.length()-1)+" "+whereSql; if(OperType.equals("hapus")) opSql="hapus DARI "+namatabel+" "+whereSql; //Pernyataan sql lengkap opSql telah dibuat coba{sqlnrows=Stmt.executeUpdate(opSql);} catch(SQLException e){out.println("SQLException: "+opSql);} |
4. Fitur:
Metode ini secara seragam menggunakan program ini untuk semua formulir yang disimpan secara langsung. Ini bersifat universal. Tidak perlu mengembangkan program yang sesuai secara mandiri untuk setiap formulir atau setiap tabel data . Pada saat yang sama, ketika struktur tabel berubah, program DBdataStore.jsp tidak perlu diubah. Program ini juga dapat ditulis ulang sebagai Servelet, dan format pemanggilannya adalah <Form Name=Frm1 Method=Post Action="DBdataStoreServelet?tablename=table1&OperType=...">.
Kesimpulan
Dalam aplikasi web, jika data formulir memerlukan verifikasi atau pemrosesan data lebih lanjut di latar belakang server setelah penyerahan, maka metode kedua perlu digunakan. Namun dalam banyak kasus, pengguna memasukkan atau mengubah data dalam formulir, menggunakan JavaScript untuk sekadar memverifikasi atau memproses data di browser front-end, lalu mengirimkannya. Tidak ada pemrosesan yang dilakukan di server back-end, dan data dikirimkan oleh formulir langsung disimpan dalam database dalam sebuah tabel. Saat ini, menggunakan metode ketiga sangatlah sederhana dan dapat sangat mengurangi beban kerja pengembang.