mysql的左右连接 分页_Java 与 Mysql连接,并分页显示
这是我第一个上规模的Java项目,我们必须在一周内完成的作业,零基础学习Java,网上收集了很多资料,逐渐对面向对象的思想有所了解,但还是半灌水,后期打算结合项目系统地学习一遍Java。老师布置的任务主要有四个:1、实现Java与mysql连接,并利用JTable分页显示数据(即要有上一页、下一页等等),并导入到Excel表格;2、Java实现两台计算机利用网络传数据;3、编写上位机、下位机实现收发数据的功能;4、结合2的网络功能以及3的上位机功能,实现对物体的控制。
这篇文章讲的是问题1,实现Java与mysql的连接(为什么要使用Java与mysql,还有Linux系统,老师给我们讲得很清楚,主要是避免版权纠纷~(^_^)),这也是才刚完成的任务,具体的做法如下:
1、用到的类
建立了三个类StudentTable、WriteStudent、DataToExcel,分别实现的功能是初始化窗体并连接数据库、查到的数据写入到函数、导出数据到外部Excel.
2、以下说明几个关键方法:
a、public Object[][] getPageData()
获取分页数据,根据每页显示的条数,来计算出当前页数据currentPageData。如果当前页小于总页数,那么每页数目应为pageCount,据此来写满表格;如果当前页没有数据了就回到前一页。
b、public int getNextPage()
获取下一页,当前页不是最后一页时,点击下一页就使当前页+1。同样,上一页、第一页、最后一页的操作与此类似。
c、public void initTable()
初始化表格的函数,作用主要是从结果集rs中获取数据,
并存入二维数组Object[][]中,如果结果集没有数据,那么就用
空来替代数据集的每一行。
d、box.addActionListener(new ActionListener()
下拉框事件监听,这个问题浪费了我很多时间。首先是忘记加入监听;其次是监听不能改变pageCount的值,于是解决方法是将初始化表格函数initTable()放入到监听内,就ok了。
操作指南:
在主机上使用该程序没问题,在其他计算机上使用该程序需要添加jxl.jar以及mysql-connector-java-5.1.26-bin.jar这两个包。在Windows上的Eclipse中导入文件后有时候需要在项目下右击鼠标选择Run as- - -Java Application运行程序。声明:该程序未在Linux环境下调试过。
图1 操作界面
总结:
由于该项目是第一次Java编程,很多地方不懂 ,难免会出点小bug,我看了很多别人的代码,然后在自己的理解基础上修改代码,实现全部功能,成了属于自己的代码,站在巨人的肩膀上,也是有一定道理的。下面是整个代码的无私奉献,希望能给像我这样苦苦寻找的初学者一点点帮助~
1、类StudentTable
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class StudentTable extends JFrame implements ActionListener {
private JScrollPane panel;
private JButton next,previous,add,delete,export,first,last;
private JLabel label1,label2;//1.显示总页数和当前页数 2.每页显示数
private JMenuBar bar;
private JMenu menu1;
private JMenu menu2;
private JMenuItem item1;
private JMenuItem item2;
private JMenuItem item3;
private JTable table;
public int currentPage=1;// 当前页
public int totalPage=0;// 总页数
public int totalRowCount=0;// 总行数
public int pageCount;// 每页显示数目
public int column=0;
public int restCount;// 最后一页数目
public Object[][] resultData;// 结果集二维数组
/*声明下拉菜单数据*/
String []array = {"10","20","30","40","60","80"};
JComboBox box = new JComboBox(array);
/*JTable表信息相关变量*/
public List students=WriteStudent.students;
public String[] columnNames={"序号","姓名","学号","成绩","身份证号"};
public DefaultTableModel model=null;
/*
* 窗体及表的建立
*/
public StudentTable(){
super("数据库MySQL操作");
this.setSize(640,480);
table=new JTable();
box.setBounds(490, 15, 100, 20);
label2 = new JLabel("每页显示条数:");
label2.setBounds(400, 3, 120, 50);
panel=new JScrollPane();
panel.getViewport().add(table);
panel.setBounds(42, 36, 550, 320);
first = new JButton("第一页");
first.setBounds(34, 380, 90,30);
previous=new JButton("上一页");
previous.setBounds(154,380, 90, 30);
next=new JButton("下一页");
next.setBounds(274, 380, 90, 30);
last = new JButton("最后一页");
last.setBounds(394, 380, 90, 30);
export = new JButton("导出");
export.setBounds(514, 380, 90, 30);
bar = new JMenuBar();
bar.setBounds(0, 0, 400, 35);
add=new JButton("添加");
add.setBorderPainted(false);
delete=new JButton("删除");
delete.setBorderPainted(false);
menu1 = new JMenu("开始");
menu2 = new JMenu("版权信息");
item1 = new JMenuItem("打开Excel表格");
item2 = new JMenuItem("退出程序");
item3 = new JMenuItem("作者信息");
/*添加监听*/
previous.addActionListener(this);
next.addActionListener(this);
add.addActionListener(this);
delete.addActionListener(this);
export.addActionListener(this);
first.addActionListener(this);
last.addActionListener(this);
label1=new JLabel();
label1.setBounds(420, 400, 180, 60);
bar.add(menu1);
bar.add(menu2);
bar.add(add);
bar.add(delete);
menu2.add(item3);
menu1.add(item1);
menu1.add(item2);
this.getContentPane().setLayout(null);
this.getContentPane().add(bar);
this.getContentPane().add(box);
this.getContentPane().add(label2);
this.getContentPane().add(panel);
this.getContentPane().add(previous);
this.getContentPane().add(next);
this.getContentPane().add(first);
this.getContentPane().add(last);
this.getContentPane().add(export);
this.getContentPane().add(label1);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
/*从MySQL数据库中获取数据*/
try{
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn=DriverManager. getConnection("jdbc:mysql://localhost:3306/student","root", "rootroot");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from mytable");
ResultSetMetaData metaData;
metaData = rs. getMetaData();
int number=metaData.getColumnCount();
while(rs.next()){
int id = rs.getInt("idMyTable");
String name = rs.getString("myname");
int number1 = rs.getInt("mynumber");
int grade = rs.getInt("mygrade");
int myid = rs.getInt("myID");
WriteStudent s=new WriteStudent(id,name,number1,grade,myid);
WriteStudent.students.add(s);
}
}
catch (ClassNotFoundException ex) {
System.err.println("Cannot find the database driver classes.");
System.err.println(ex);
}
catch (SQLException ex) {
String[] options3 ={"新建MyTable数据表","取消"};
int strength3 = JOptionPane.showOptionDialog(null,"表MyTable不存在!", "信息", JOptionPane.YES_OPTION,JOptionPane.INFORMATION_MESSAGE, null, options3, options3[0]);
if(strength3 == javax.swing.JOptionPane.YES_OPTION){
System.out.println("The Table not exsits.");
}
if(strength3 == javax.swing.JOptionPane.INFORMATION_MESSAGE){
System.exit(0);
}
}
/**
* 事件监听
*/
/*下拉菜单事件监听*/
box.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String Str=(String) box.getSelectedItem();
pageCount=Integer.parseInt(Str);
initTable();
System.out.println(pageCount);
}
});
/*菜单项事件监听*/
item3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null, "物联网1104\n李少军\n0307110210", "作者信息", JOptionPane.INFORMATION_MESSAGE);
}
});
item1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
Runtime.getRuntime().exec("cmd /c D:\\Mytable.xls /f");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
item2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
/**
* 获取下一页
*/
public int getNextPage(){
if(this.currentPage!=this.totalPage){
return ++currentPage;
}
return -1;
}
/**
* 获取上一页
*/
public int getPreviousPage(){
if(this.currentPage!=1){
return --currentPage;
}
return -1;
}
/**
* 获取最后一页
*/
public int getLastPage(){
currentPage = totalPage;
return currentPage;
}
/**
* 获取第一页
*/
public int getFirstPage(){
currentPage = 1;
return currentPage;
}
/**
* 获取总页数
*/
public int getTotolPage(){
return this.totalPage;
}
/**
* 获取当前页
*/
public int getCurrentPage(){
return this.currentPage;
}
/**
* 获得原始数据集
* @param students
* @return
*/
public Object[][] getData(List students){
if(students.size()>0){
Object[][] data=new Object[students.size()][4];
for(int i=0;i
WriteStudent s=students.get(i);
Object[] a={s.getId(),s.getName(),s.getnumber(),s.getgrade(),s.getID()};//把List**的数据赋给Object数组
data[i]=a;//把数组的值赋给二维数组的一行
}
return data;
}
return null;
}
/**
* 初始化结果集
* @param data
*/
public void initResultData(Object[][] data){
if(data!=null){
resultData=data;//总的结果集
column=data[0].length;//表的列数
totalRowCount=data.length;//表的长度
totalPage=totalRowCount%pageCount==0?totalRowCount/pageCount:totalRowCount/pageCount+1;//结果集的总页数
restCount=totalRowCount%pageCount==0?pageCount:totalRowCount%pageCount;//最后一页的数据数
label1.setText("总共"+totalRowCount+"记录|当前第"+currentPage+"页");
}
}
/**
* 获取分页数据
* @return
*/
public Object[][] getPageData(){
Object[][] currentPageData=new Object[pageCount][column];//构造每页数据集
if(this.getCurrentPage()
for(int i=pageCount*(this.getCurrentPage()-1);i
for(int j=0;j
//把结果集中对应每页的每一行数据全部赋值给当前页的每一行的每一列
currentPageData[i%pageCount][j]=resultData[i][j];
}
}
}else{
//在动态改变数据结果集的时候,如果当前页没有数据了,则回到前一页(一般针对最后一页而言)
if(pageCount*(this.getCurrentPage()-1)>=totalRowCount)this.currentPage--;
for(int i=pageCount*(this.getCurrentPage()-1);i
for(int j=0;j
currentPageData[i%pageCount][j]=resultData[i][j];
}
}
}
return currentPageData;
}
/**
* 初始化表格数据
*/
public void initTable(){
Object[][] data=getData(students);
if(data!=null){
initResultData(data);
model=new DefaultTableModel(getPageData(),columnNames);
}else{
//如果结果集中没有数据,那么就用空来代替数据集中的每一行
Object[][] nothing={{},{},{},{},{}};
model=new DefaultTableModel(nothing,columnNames);
totalRowCount=0;
}
table.setModel(model);
table.setRowHeight(20);
DefaultTableCellRenderer r=new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, r);
}
/**
* 按钮事件
*/
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//String ItemName = e.getActionCommand();
JButton button=(JButton) e.getSource();
if(button.equals(first)){
int i=getFirstPage();
if(i==-1)return;
}
if(button.equals(previous)){
int i=getPreviousPage();
if(i==-1)return;
}
if(button.equals(next)){
int i=getNextPage();
if(i==-1)return;
}
if(button.equals(last)){
int i=getLastPage();
if(i==-1)return;
}
if(button.equals(delete)){
int i=table.getSelectedRow();
if(i==-1)return ;
Integer id=(Integer) table.getValueAt(i,0);
if(id==null)return ;
WriteStudent s=null;
for(WriteStudent stu:WriteStudent.students){
if(stu.getId().equals(id))
s=stu;
}
int index=WriteStudent.students.indexOf(s);
WriteStudent.students.remove(index);
initTable();
label1.setText("总共"+totalRowCount+"记录|当前第"+currentPage+"页");
return;
}
if(button.equals(add)){
Integer id=0;
for(WriteStudent stu:WriteStudent.students){
if(stu.getId()>id)id=stu.getId();
}
WriteStudent student=new WriteStudent(id+1,"Lynn",0307110222,145,31312577);
WriteStudent.students.add(student);
initTable();
label1.setText("总共"+totalRowCount+"记录|当前第"+currentPage+"页");
return;
}
if(button.equals(export)){
try{
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn=DriverManager. getConnection("jdbc:mysql://localhost:3306/student","root", "rootroot");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from MyTable");
DataToExcel excel= new DataToExcel();
File newFile = new File("D:\\MyTable.xls");
excel.WriteExcel(newFile, rs);
//System.out.println("HI");
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
Object[][] currentPageData=new Object[pageCount][column];//构造每页数据集
if(this.getCurrentPage()
for(int i=pageCount*(this.getCurrentPage()-1);i
for(int j=0;j
//把结果集中对应每页的每一行数据全部赋值给当前页的每一行的每一列
currentPageData[i%pageCount][j]=resultData[i][j];
}
}
}else{
//在动态改变数据结果集的时候,如果当前页没有数据了,则回到前一页(一般针对最后一页而言)
if(pageCount*(this.getCurrentPage()-1)>=totalRowCount)this.currentPage--;
for(int i=pageCount*(this.getCurrentPage()-1);i
for(int j=0;j
currentPageData[i%pageCount][j]=resultData[i][j];
}
}
}
DefaultTableModel model=new DefaultTableModel(currentPageData,columnNames);
table.setModel(model);
label1.setText("总共"+totalRowCount+"记录|当前第"+currentPage+"页");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new StudentTable();
}
}
2、类WriteStudent
import java.util.ArrayList;
import java.util.List;
/*
* 获得表信息
*/
public class WriteStudent {
private Integer id;
private String name;
private int number1;
private int grade;
private int myid;
public static List students=new ArrayList();
public WriteStudent(){}
public WriteStudent(Integer id,String name,int number1,int grade,int myid){
super();
this.id=id;
this.name=name;
this.number1=number1;
this.grade=grade;
this.myid=myid;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getnumber() {
return number1;
}
public void getnumber(String number) {
this.number1 = number1;
}
public int getgrade() {
return grade;
}
public void getgrade(int grade) {
this.grade = grade;
}
public int getID() {
return myid;
}
public void setID(int myid) {
this.myid = myid;
}
}
3、类DataToExcel
import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/* 主要是用来创建excel工作薄*/
public class DataToExcel {
/**
* 按照数据库中查询到的结果集创建一个新的工作薄,建议传入参数为Resultset结果集
*
* @param fileName 包含文件的路径以及文件名
* @param rs
* @throws Exception
*/
public void WriteExcel(File fileName,ResultSet rs) throws Exception{
//创建一个新的工作薄,fileName 包含了文件名以及路径。
WritableWorkbook book = null;
WritableSheet sheet = null;
try {
book = Workbook.createWorkbook(fileName);
sheet = book.createSheet("sheet1", 0);//给工作薄添加一个工作表,命名为 sheet1
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int i = 0;
int j = 0;
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++)
{
sheet.addCell(new Label(k, 0, rs.getMetaData().getColumnName(k + 1)));
}
while (rs.next()) {
//算法,依次添加数据库中所有符合的数据到excel中
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
sheet.addCell(new Label(k, j + i + 1, rs.getString(k + 1)));
}
i++;
}
book.write();//写入工作薄
book.close();//关闭工作薄
rs.close();//关闭结果集
}
}
最后要感谢同学的帮助~
mysql的左右连接 分页_Java 与 Mysql连接,并分页显示相关推荐
- java mysql 文本导入数据语句_Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL...
Mysql load data的使用 数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际上执行的还是在批量IN ...
- java druid mysql连接池_java使用Druid连接池连接mysql
1.先在mysql创建需要的数据库和表 use book; create table t_user( `id`intprimary key auto_increment, `username` var ...
- java jdbc(mysql)驱动源码分析_JAVA JDBC(MySQL)驱动源码分析(二)
本文系转载,地址:http://blog.csdn.net/brilliancezhou/article/details/5425687 上一篇中分析了Class.forName("com. ...
- mysql学生管理系统er图_java swing mysql实现的学生选课成绩信息管理系统附带视频指导教程及数据库ER图...
<p> <span style="color:#4F4F4F;font-family:"font-size:16px;background-color:#FFFF ...
- mysql的收银软件_java swing mysql实现的超市收银进销存系统项目源码附带视频指导运行教程...
<p> <span style="color:#555555;font-family:"font-size:16px;background-color:#FFFF ...
- java长连接例子_java实现长连接
(); public Client(String serverIp, int port) { this.serverIp=serverIp; this.port=port; } public void ...
- java 蓝牙指定连接失败_java – Android蓝牙连接 – 服务发现失败
我正在尝试创建一个基本的蓝牙应用程序,用于测试设备. 这是我的线程代码的一部分: public void run() { mBluetoothAdapter.cancelDiscovery(); Lo ...
- mysql分页查询出租房屋信息_分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)...
分页查询信息 使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目时一个简单的运用eclipse ...
- java连接mysql数据库增删改查_java连接mysql数据库增删改查操作记录
1. 连接数据库.得到数据库连接变量 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意加入Driver JARs的时候加入的包,我的是mysql-co ...
最新文章
- ESP32,ESP8266之间WiFi互联实验
- day06_方法_20150806
- Hello程序的转换处理过程及程序执行时的数据流动过程
- Centos7.9禁用密码登录
- java中方法不调用会执行_java[新手]类里的方法没有调用为什么实现了?
- Codeforces 934C - A Twisty Movement
- CRM business roles and PFCG roles
- java 安卓界面 可视化_Monkey可视化工具开发(android篇)
- android高仿微信视频编辑页-视频多张图片提取
- es6异步编程 Promise 讲解 --------各个优点缺点总结
- Linux-DHCP服务器
- android压力测试之monkey详解
- 蓝桥杯 算法提高 矩阵乘方
- 人生是一场盛大的遇见
- PS-twoday-移动工具
- 瑞萨linux编译环境,瑞萨RZ/A2M Linux4.19系统构建与驱动移植纪实之一:BSP环境搭建...
- 70条正则表达式的整理汇总
- android视图工具栏,Android studio预览视图工具栏不见了
- kubernetes部署 rook ceph
- 安卓系统管理软件_BlackBerry为部署车载安卓系统保驾护航
热门文章
- httpd虚拟主机三种模式配置与https配置
- 什么是交换机,交换机的工作原理
- 论文写作:MathType公式居中编号居右设置
- Bseline基准预测、zip()、dict()、groupy().agg()、
- 多维泰勒网matlab,非线性系统多维泰勒网控制的稳定性分析及性能优化
- 凡科建站,PageAdmin,易极赞等自助建站系统的区别
- 阿里巴巴全球数学竞赛品牌传播分析(上)
- prism 创建ViewModel
- 摩拜联手高通中移动 剑指最大物联平台步子太大?
- android 盒子排名,2021电视盒子排名:业内公认最好用的五大电视盒子