ตัวอย่างนี้แบ่งปันรหัสเฉพาะสำหรับ servlet เพื่อรับรู้ถึงผลกระทบการแบ่งแยกสำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
อัลกอริทึมการพลิกผัน:
ต้องมีการกำหนดตัวแปรสี่ตัวพวกเขามีการใช้งานของตัวเอง
Int Pagesize: มีกี่ระเบียนที่แสดงต่อหน้า
Int Pagenow: หน้าไหนหวังว่าจะแสดง
int pagecount: มีกี่หน้าทั้งหมด
int rowcount: มีบันทึกทั้งหมดกี่รายการ
ภาพประกอบ:
Pagesize ถูกระบุ Pagenow หมายถึงตัวเลือกของผู้ใช้
RowCount ได้มาจากตาราง
Pagecount คำนวณและสูตรการคำนวณคือ:
if (rowCount%pageSize == 0) {pageCount = rowCount/pagesize; } else {pageCount = rowCount/pagesize+1; - หากใช้คำสั่ง: เลือกรายการชื่อฟิลด์จากชื่อตารางที่ id ระหว่าง? และ ?
คำสั่ง SQL นี้เร็วกว่าแน่นอน แต่มีปัญหานั่นคือถ้า ID ของตารางถูกลบออกหน้าหนึ่งอาจมีบันทึกหนึ่งหายไป
ดังนั้นวิธีสุดท้ายคือข้อความต่อไปนี้:
เลือกรายการชื่อฟิลด์หน้าสุดยอดจากชื่อตารางที่ไม่ได้อยู่ใน (เลือกหน้าสุดยอด*(pagenow-1) id จากชื่อตาราง)
รหัสการใช้งานคือ:
นำเข้า Javax.servlet.http.*; นำเข้า Java.io.*; นำเข้า Java.sql.*; ชั้นเรียนสาธารณะ Fenye ขยาย Httpservlet {โมฆะสาธารณะ DOGET (HTTPSERVLETREQUEST REQ, HTTPSERVLETRESSESSENS RES) {การเชื่อมต่อ CT = NULL; PreparedStatement PS = NULL; ผลลัพธ์ RS = NULL; int pagesize = 3; // ฉันหวังว่าจำนวนระเบียนจะปรากฏขึ้นสำหรับแต่ละหน้า int pagenow = 1; // เริ่มต้นหน้าปัจจุบันไปยังหน้าแรก int pagecount = 0; // จำนวนหน้าทั้งหมดคุณต้องรู้ int ผ่านการคำนวณ rowcount = 0; // บันทึกจำนวนทั้งหมดและค้นหาตารางเพื่อค้นหาสตริงสปาโนว์ = req.getParameter ("pagenow"); // รับหน้าปัจจุบันที่ผ่านถ้า (Spagenow! = null) // ถ้าได้รับค่าที่ไม่ได้รับค่าให้แปลงเป็นจำนวนเต็ม {pagenow = integer.parseint (Spagenow); } ลอง {printWriter pw = res.getWriter (); class.forname ("com.microsoft.sqlserver.jdbc.sqlserverdriver"); CT = DriverManager.getConnection ("JDBC: SQLServer: //127.0.0.1: 1433; databasename = นักเรียน", "SA", "รหัสผ่าน"); ps = ct.preparestatement ("เลือกนับ (*) จาก [นักเรียน] [dbo]. [นักเรียน]"); // รับจำนวนระเบียนทั้งหมดในตาราง rs = ps.executeQuery (); ในขณะที่ (rs.next ()) {rowcount = rs.getInt (1); // รับจำนวนระเบียนทั้งหมดในตาราง} ถ้า (rowCount%pageSize == 0) // คำนวณจำนวนทั้งหมดของหน้า {pageCount = rowCount/pagesize; } else {pageCount = rowCount/pagesize+1; } ps = ct.prepareStatement ("เลือก top"+pageize+" * จาก [นักเรียน]. [dbo]. [นักเรียน] ที่ไม่ได้อยู่ใน (เลือกด้านบน"+pagesize * (pagenow-1)+"id จาก [นักเรียน]. [DBO] [นักเรียน])"); rs = ps.executeQuery (); pw.println ("<body> <center>"); // แสดงผลลัพธ์การสืบค้นในรูปแบบของตาราง pw.println ("<table border = 1"); pw.println ("<tr> <th> id </th> <th> ชื่อ </th> <th> เกรด </th> </tr>"); ในขณะที่ (rs.next ()) {pw.println ("<tr>"); pw.println ("<td>"+rs.getint (1)+"</td>"); pw.println ("<td>"+rs.getString (2)+"</td>"); pw.println ("<td>"+rs.getString (3)+"</td>"); pw.println ("</tr>"); } pw.println ("</table>"); ถ้า (pagenow == 1) // การเชื่อมโยงหลายมิติในหน้าก่อนหน้าเมื่อมันกระโดดไปยังหน้าแรกแล้วหน้าจะไม่เปลี่ยนอีกต่อไป {pw.println ("<a href = fenye? pagenow ="+pagenow+">"+"+" } อื่น // เมื่อไม่ได้กระโดดไปยังหน้าแรกทุกครั้งที่มีการคลิกไฮเปอร์ลิงก์หน้าจะกระโดดไปข้างหน้า {pw.println ("<a href = fenye? pagenow ="+(pagenow-1)+">"+"ไปข้างหน้า"+"</a>"); } if (pagecount <= 5) // ควบคุมจำนวนหน้าที่แสดงในจำนวนไฮเปอร์ลิงก์ {สำหรับ (int i = 1; i <= pagecount; i ++) {pw.println ("<a href = fenye? pagenow ="+i+">" }} อื่นถ้า (pagecount-pagenow <= 5) {สำหรับ (int i = pagenow; i <= pagecount; i ++) pw.println ("<a href = fenye? pagenow ="+i+">"+i+"</a>"); } // เมื่อมีหน้ามากเกินไปสำหรับหน้าสวยงามคุณต้องควบคุมจำนวนไฮเปอร์ลิงก์ที่แสดง {สำหรับ (int i = pagenow; i <= pagenow+5; i ++) pw.println ("<a href = fenye? pagenow ="+i+" } ถ้า (pagenow == pagecount) // เมื่อเป็นหน้าสุดท้ายแล้วการคลิกที่หน้าถัดไปจะไม่กระโดดอีกต่อไป {pw.println ("<a href = fenye? pagenow ="+pagenow+">"+"backward"+"</a>"); } else {pw.println ("<a href = fenye? pagenow ="+(pagenow+1)+">"+"ย้อนหลัง"+"</a>"); } pw.println ("</enter> </body>"); } catch (exception ex) {ex.printstacktrace (); }} โมฆะสาธารณะ dopost (httpservletrequest req, httpservletResponse res) {this.doget (req, res); -ผลการดำเนินการ:
เมื่อจำนวนระเบียนที่แสดงต่อหน้าคือ 3:
คลิกการเชื่อมต่อที่สอดคล้องกันเพื่อกระโดดได้สำเร็จ
หน้าสุดท้ายจะแสดงเป็น:
รหัสที่เกี่ยวข้อง:
if (pagecount <= 5) {สำหรับ (int i = 1; i <= pagecount; i ++) {pw.println ("<a href = fenye? pagenow ="+i+">"+i+"</a>"); -คลิกย้อนกลับเพื่อไม่กระโดดอีกต่อไป
เพื่อแสดงว่าโปรแกรมควบคุมจำนวนไฮเปอร์ลิงก์ของหน้ามีประสิทธิภาพเพียงใดให้เปลี่ยนจำนวนระเบียนที่แสดงต่อหน้าเป็น 1
หน้าแรกแสดงเอฟเฟกต์:
รหัสที่เกี่ยวข้อง:
อื่น {สำหรับ (int i = pagenow; i <= pagenow+5; i ++) pw.println ("<a href = fenye? pagenow ="+i+">"+i+"</a>"); -เอฟเฟกต์การแสดงผลเมื่อหมายเลขหน้าปัจจุบันเพิ่มขึ้นเรื่อย ๆ :
รหัสที่เกี่ยวข้อง:
อื่นถ้า (pagecount-pagenow <= 5) {สำหรับ (int i = pagenow; i <= pagecount; i ++) pw.println ("<a href = fenye? pagenow ="+i+">"+i+"</a>"); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น