Java GUI+mysql+分页查询

时间:2023-03-09 02:03:40
Java  GUI+mysql+分页查询

1.要求 : 创建一个学生信息管理数据库

2.实现分页查询

代码如下:

a)学生实体类:

/**
* @author: Annie
* @date:2016年6月23日
* @description:学生实体类 学号+姓名+密码
*/
public class student {
private int sid;
private String sname;
private String spassword; public student(int sid, String sname, String spassword) {
this.sid = sid;
this.sname = sname;
this.spassword = spassword;
} public void setSid(int sid) {
this.sid = sid;
} public void setSname(String sname) {
this.sname = sname;
} public void setSpassword(String spassword) {
this.spassword = spassword;
} public int getSid() {
return this.sid;
} public String getSname() {
return this.sname;
} public String getSpassword() {
return this.spassword;
} public void showStudentInfo() {
System.out.println("学号:" + this.getSid() + "\t姓名:" + this.getSname()
+ "\t密码:" + this.getSpassword());
} public String getStudentInfo() {
return "学号" + this.getSid() + "姓名" + this.getSname() + "密码:"
+ this.getSpassword()+"\n";
} }

b)数据库操作类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator; /**
* @author: Annie
* @date:2016年6月23日
* @description:
*/
public class linkDB { ArrayList<student> arrayS = null;
final int per_pages_size=5;//每个页面的长度,即每个页面几条数据 //数据库的连接的方法
public Connection getConnection2() {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/test";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, "root", "12345678");
} catch (SQLException e) {
System.out.println("SQL 异常");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("数据库没有找到");
e.printStackTrace();
}
return conn;
} /**
* 数据库中查询的代码,返回一个结果集
* */
public ResultSet getAllStudent_info() {
Connection conn = this.getConnection2();
Statement comm = null;
ResultSet rs = null;
try {
comm = conn.createStatement(); String sql2 = "select * from student order by sid";
rs = comm.executeQuery(sql2);
return rs; } catch (SQLException e) {
e.printStackTrace();
}
return rs;
} /**
* 获取数据库中的总行数
* */
public int getPagesTotalSize() {
//得到查询的结果集
ResultSet rs = this.getAllStudent_info();
int totalsize = 0;//数据总体的行数
try {
rs.last(); // 将光标移动到此 ResultSet 对象的最后一行
// 获取当前行编号(先将光标移到最后一行,然后再获取最后一行的下标,即可得到整个数据库的行数)
totalsize = rs.getRow();
} catch (SQLException e) {
e.printStackTrace();
}
return totalsize;
} /**
* 得到总共的页数的方法
* */
public int getPagesNum() {
int totalsize = (Integer)this.getPagesTotalSize()/per_pages_size;
return (totalsize+1);
} /**
* 将从数据库里遍历到的数据装到数组里
* */
public ArrayList<student> get_per_Page(int per_pages_num) {
//得到所有学生的结果集
ResultSet rs = this.getAllStudent_info();
//定义一个装学生对象的集合
ArrayList<student> arrayS = new ArrayList();
int totalsize = this.getPagesTotalSize(); int sid = 0;//学号
String sname = null;//姓名
String spassword = null;//密码 if (per_pages_size * (per_pages_num - 1) < totalsize) {
int start = per_pages_size * (per_pages_num - 1) + 1;
int end = 0;
if (per_pages_size * per_pages_num > totalsize) {
end = totalsize;
} else {
end = per_pages_size * per_pages_num;
}
for (int i = start; i <= end; i++) {
try {
rs.absolute(i);
sid = rs.getInt(1);
sname = rs.getString(2);
spassword = rs.getString(3);
student s = new student(sid, sname, spassword);
arrayS.add(s);
} catch (SQLException e) {
e.printStackTrace();
}
}
} else {
System.out.println("超出范围");
}
return arrayS;
} /**
* 展示数据的方法
* */
public void test_per_page(int id) {
ArrayList<student> arrayS = this.get_per_Page(id); //遍历数组,将数据展示在文本域里
for (Iterator i = arrayS.iterator(); i.hasNext();) {
student s = (student) i.next();
s.showStudentInfo();
}
}
}

c)主界面类

import java.awt.BorderLayout;

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator; /**
* @author: Annie
* @date:2016年6月23日
* @description:
*/
public class MainPages extends Frame{ private int currentlyPage = 1; //初始化当前的页数
private Panel center, bottom;
private Button previously, next, first, tail;
private TextArea ta;
private linkDB ldb = new linkDB();
ArrayList<student> arrayS = null; public MainPages() { this.previously = new Button("上一页");
this.next = new Button("下一页");
this.first = new Button("首页");
this.tail = new Button("尾页");
this.ta = new TextArea();
ta.setRows(5);
ta.setBounds(0, 0, 40, 20);
this.initialization(); this.center = new Panel(new GridLayout(1, 1));
this.bottom = new Panel(new GridLayout(1, 4)); center.add(ta); bottom.add(previously);
bottom.add(next);
bottom.add(first);
bottom.add(tail); /*对首页、下一页、上一页、尾页做监听*/
MyListener ml = new MyListener();
this.previously.addActionListener(ml);
this.next.addActionListener(ml);
this.first.addActionListener(ml);
this.tail.addActionListener(ml); // this.add(center,BorderLayout.NORTH);不知是何原因?这样的话,显示不bottom。可能和BorderLayout有关系。
this.add(center, BorderLayout.CENTER);
this.add(bottom, BorderLayout.SOUTH); this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
dispose();
System.exit(0);
}
});//对关闭窗口做监听 this.setBounds(200, 200, 350, 180);
this.setVisible(true); } /**
* 初始化第一页
* */
void initialization() {
showDate();
} /**
* 对按钮做监听的方法
* */
class MyListener implements ActionListener { public void actionPerformed(ActionEvent e) {
ta.setText("");
if (e.getSource() == previously) {//上一页的按钮
if (currentlyPage >= 2) {
currentlyPage--;
} else {
ta.append("当前为第一页!\n");
}
//展示数据
showDate(); } else if (e.getSource() == next) { //如果为下一页
ta.setText("");
int pagesNum = ldb.getPagesNum();
if (currentlyPage < pagesNum) {//如果当前的页码小于总页数
currentlyPage++;
} else {
ta.append("当前为最后一页!\n");
} showDate(); } else if (e.getSource() == first) {//如果是首页
ta.setText("");
currentlyPage = 1;
showDate(); } else if (e.getSource() == tail) {//如果是尾页
ta.setText("");
currentlyPage = ldb.getPagesNum();
showDate();
}
}
} /**
* 展示数据
*/
public void showDate() {
arrayS = ldb.get_per_Page(currentlyPage);
Iterator i = arrayS.iterator();
while ( i.hasNext()) {
student s = (student) i.next();
ta.append(s.getStudentInfo());
}
}
public static void main(String[] args) {
MainPages mp = new MainPages();
}
}

d)创建数据库的表格及插入数据

create table student
(sid int not null,
sname varchar(50),
spassword varchar(20),
primary key(sid)
);

insert into student values('1','科比','24');
insert into student values('2','加内特','5');
insert into student values('3','艾弗森','23');

insert into student values('11','德罗巴','24');
insert into student values('12','罗尼','5');
insert into student values('13','克里斯蒂亚诺 诺那尔多','23');
insert into student values('21','梅西','24');
insert into student values('22','比利亚','5');
insert into student values('23','哈维','23');
insert into student values('31','麦孔','24');
insert into student values('32','埃弗拉','5');
insert into student values('33','费尔南德斯','23');
insert into student values('41','维迪奇','24');
insert into student values('42','卡西利亚斯','5');

insert into student values('43','詹姆斯','23');
insert into student values('51','韦德','24');
insert into student values('52','姚明','5');
insert into student values('53','邓肯','23');

实现效果图:

aaarticlea/png;base64,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" alt="" />