Java+Swing+sqlServer学生成绩管理系统(DAY 11)从数据库student表中获取主窗口的表格信息

文章描述了一个基于Java的学生成绩管理系统,包括StudentRequest类用于接收查询请求,StudentService接口定义了查询方法,以及StudentServiceImpl类中使用JDBC执行SQL语句进行数据库操作,实现了分页查询功能。
摘要由CSDN通过智能技术生成

insert into student values(8,‘ff’,‘202008’,‘北京’,96,85,94,275)

insert into student values(9,‘f’,‘202009’,‘北京’,96,85,94,275)

insert into student values(10,‘fff’,‘202010’,‘北京’,96,85,94,275)

insert into student values(11,‘ffff’,‘202011’,‘北京’,96,85,94,275)

insert into student values(12,‘aa’,‘202012’,‘北京’,96,85,94,275)

insert into student values(13,‘ss’,‘202013’,‘北京’,96,85,94,275)

insert into student values(14,‘dd’,‘202014’,‘北京’,96,85,94,275)

insert into student values(15,‘ssss’,‘202015’,‘北京’,96,85,94,275)

insert into student values(16,‘ffffff’,‘202016’,‘北京’,96,85,94,275)

insert into student values(17,‘rr’,‘202017’,‘北京’,96,85,94,275)

insert into student values(18,‘r’,‘202018’,‘北京’,96,85,94,275)

insert into student values(19,‘y’,‘202019’,‘北京’,96,85,94,275)

insert into student values(20,‘yy’,‘202020’,‘北京’,96,85,94,275)

insert into student values(21,‘fy’,‘202021’,‘北京’,96,85,94,275)

insert into student values(22,‘fuf’,‘202022’,‘北京’,96,85,94,275)

insert into student values(23,‘fuuf’,‘202023’,‘北京’,96,85,94,275)

insert into student values(24,‘foof’,‘202024’,‘北京’,96,85,94,275)




### []( )StudentRequest



package req;

public class StudentRequest {

private int pageNow;

private int pageSize;

//每一页的第一条记录

private int start;

//查询词

private String searchKey; 



public int getStart() {

	//比如第一页从第零条记录开始

	return (pageNow-1)*pageSize;

}

public int getPageNow() {

	return pageNow;

}

public void setPageNow(int pageNow) {

	this.pageNow = pageNow;

}

public int getPageSize() {

	return pageSize;

}

public void setPageSize(int pageSize) {

	this.pageSize = pageSize;

}

public String getSearchKey() {

	return searchKey;

}

public void setSearchKey(String searchKey) {

	this.searchKey = searchKey;

}

public static void main(String[] args) {

	// TODO Auto-generated method stub



}

}




### []( )StudentService



package service;

import req.StudentRequest;

import res.TableDTO;

public interface StudentService {

//获取查询、搜索的结果,定义一个接口

//返回值应当返回一个data和记录总共的条数,也将其封装成一个对象TableDTO

//入参应有当前是第几页,查询词等,所以将入参包装成一个对象StudentRequest

TableDTO  retrieveStudents(StudentRequest request);

//

}




### []( )TableDTO



package res;

import java.util.Vector;

public class TableDTO {

private Vector<Vector<Object>> data;

private int totalCount;



public Vector<Vector<Object>> getData() {

	return data;

}



public void setData(Vector<Vector<Object>> data) {

	this.data = data;

}



public int getTotalCount() {

	return totalCount;

}



public void setTotalCount(int totalCount) {

	this.totalCount = totalCount;

}



public static void main(String[] args) {

	// TODO Auto-generated method stub



}

}




### []( )StudentServiceImpl



package service;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Vector;

import req.StudentRequest;

import res.TableDTO;

import util.DBUtil;

/*

  • StudentService实现类

*/

public class StudentServiceImpl implements StudentService{

@Override

public TableDTO retrieveStudents(StudentRequest request) {

	StringBuffer sql=new StringBuffer();

	sql.append("select * from student ");

	//判断是否为空,如果查询词为空就不查

	if(request.getSearchKey()!=null&&!"".equals(request.getSearchKey().trim())) {

		sql.append(" where sname like '%"+request.getSearchKey().trim()+"%'");

	}

	/*

	 * mysql里用order排序limit分页

	 * 但是sqlServer里不支持分页

	 * 因而下面两行代码舍弃,对应的分页功能也舍弃

	 */

// sql.append("order by id desc limit “).append(request.getStart()).append(”, ")

// .append(request.getPageSize());

	//至此sql语句定义完成

	

	//执行sql语句

	Connection conn=null;

	PreparedStatement ps=null;

	ResultSet rs=null;

	TableDTO returnDTO=new TableDTO();

	

	try {

		conn=DBUtil.getConn();

		ps =conn.prepareStatement(sql.toString());

		rs=ps.executeQuery();

		//查询记录,并设置到TableDTO中

		returnDTO.setData(fillData(rs));

		//至此sql语句完成data的查询

		

		//将sql语句置空,开始查询totalCount

		sql.setLength(0);

		sql.append("select count(*) from student ");

		if(request.getSearchKey()!=null&&!"".equals(request.getSearchKey().trim())) {

			sql.append(" where sname like '%"+request.getSearchKey().trim()+"%'");

		}

		ps =conn.prepareStatement(sql.toString());

		rs=ps.executeQuery();

		

		while(rs.next()) {

			int count=rs.getInt(1);

			//仅有一条记录,直接设置到TableDTO中

			returnDTO.setTotalCount(count);

		}

		return returnDTO;

	}catch(Exception e) {

		e.printStackTrace();

	}finally {

		DBUtil.closeRs(rs);

		DBUtil.closePs(ps);

		DBUtil.closeConn(conn);

	}	

	return null;

}





private Vector<Vector<Object>> fillData(ResultSet rs) throws SQLException {

	Vector<Vector<Object>> data=new Vector<>();

	while(rs.next()) {

		//处理查出的每一条记录

		Vector<Object> oneRecord=new Vector<>();

		//获取每一列属性下的值,参数可以填属性名,也可以填对应的序号

		int id=rs.getInt("id");

		String sname=rs.getString("sname");

		String sno=rs.getString("sno");

		String homeTown=rs.getString("homeTown");

		int cnScore=rs.getInt("cnScore");

		int enScore=rs.getInt("enScore");

		int mathSocre=rs.getInt("mathScore");

		int totalScore=cnScore+enScore+mathSocre;

		//将每一列的值加入到oneRecord中

		oneRecord.addElement(id);

		oneRecord.addElement(sname);

		oneRecord.addElement(sno);

		oneRecord.addElement(homeTown);

		oneRecord.addElement(cnScore);

		oneRecord.addElement(enScore);

		oneRecord.addElement(mathSocre);

		oneRecord.addElement(totalScore);

		//将每一行的记录加入到二维data数组中

		data.addElement(oneRecord);	

	}

	return data;

}

}




### []( )MainView



package view;

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.FlowLayout;

import java.net.URL;

import java.util.Vector;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextField;

import ext.MainViewTable;

import ext.MainViewTableModel;

import handler.MainHandler;

import req.StudentRequest;

import res.TableDTO;

import service.StudentService;

import service.StudentServiceImpl;

import util.DimensionUtil;

public class MainView extends JFrame{

JPanel northPanel=new JPanel(new FlowLayout(FlowLayout.LEFT));//JPanel默认流布局,组件居左

JButton addBtn=new JButton("增加");

JButton updataBtn=new JButton("修改");

JButton delBtn=new JButton("删除");

JTextField searchTxt=new JTextField(15);

JButton searchBtn=new JButton("查询");



JPanel southPanel=new JPanel(new FlowLayout(FlowLayout.RIGHT));//组件居右

JButton preBtn=new JButton("上一页");

JButton nextBtn =new JButton("下一页");



//创建一个MainViewTable对象

MainViewTable mianViewTable=new MainViewTable();

//声明一个MainHandler对象

MainHandler mainHandler;



//

private int pageNow=1;//默认显示第一页

private int pageSize=10;//默认每页显示十条记录

//构造方法

public MainView() {

	

	super("主界面-学生成绩管理系统");

	Container contentPane=getContentPane();

	

	//创建一个MainHandler对象

	mainHandler = new MainHandler(this);

	

	//放置北边的组件

	layoutNorth(contentPane);

	//放置中间的组件

	layoutCenter(contentPane);

	//放置南边的组件

	layoutSouth(contentPane);

	//基础设置

    init();

}



private void layoutCenter(Container contentPane) {

	

	//调用数据库数据,创建一个StudentService和StudentRequest实例

	//获取从数据库中查询到的data与totalCount

	StudentService studentService=new StudentServiceImpl();

	StudentRequest request=new StudentRequest();

	request.setPageNow(pageNow);

	request.setPageSize(pageSize);

	request.setSearchKey(searchTxt.getText().trim());

	TableDTO tableDTO = studentService.retrieveStudents(request);

	Vector<Vector<Object>> data = tableDTO.getData();

	showPreNext(tableDTO.getTotalCount());

	

	//暂时还没调用数据库,所以把主面板上内容写死,创建一个二维数组存放data

// Vector<Vector> data = new Vector<>();

// Vector rowVector1 = new Vector<>();

// rowVector1.addElement(“1”);

// rowVector1.addElement(“张三”);

// rowVector1.addElement(“1”);

// rowVector1.addElement(“湖南”);

//

// Vector rowVector2 = new Vector<>();

// rowVector2.addElement(“2”);

// rowVector2.addElement(“李四”);

// rowVector2.addElement(“2”);

// rowVector2.addElement(“北京”);

//

// Vector rowVector3 = new Vector<>();

// rowVector3.addElement(“3”);

// rowVector3.addElement(“王五”);

// rowVector3.addElement(“3”);

// rowVector3.addElement(“上海”);

//

// data.addElement(rowVector1);

// data.addElement(rowVector2);

// data.addElement(rowVector3);

    //自定义的MainViewTableModel

	MainViewTableModel mainViewTableModel=MainViewTableModel.assembleModel(data);

	//将Table与TableModel关联

	mianViewTable.setModel(mainViewTableModel);

	//设置渲染方式

	mianViewTable.renderRule();

	

	 JScrollPane jScrollPane = new JScrollPane(mianViewTable);

	 contentPane.add(jScrollPane,BorderLayout.CENTER);

}



private void layoutSouth(Container contentPane) {

	

	//增加按钮事件监听

	preBtn.addActionListener(mainHandler);

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

image.png

enderRule();

	 JScrollPane jScrollPane = new JScrollPane(mianViewTable);

	 contentPane.add(jScrollPane,BorderLayout.CENTER);

}



private void layoutSouth(Container contentPane) {

	

	//增加按钮事件监听

	preBtn.addActionListener(mainHandler);

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

[外链图片转存中…(img-Rnb1cQJT-1714320388524)]

[外链图片转存中…(img-xseLW7aE-1714320388525)]

[外链图片转存中…(img-91oNb9IS-1714320388526)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值