文档章节

daydayup---->Poi操作

小强斋太
 小强斋太
发布于 2016/11/09 20:05
字数 827
阅读 1
收藏 0
点赞 0
评论 0

学生的成绩统计在excel中,给出按学分绩排名的名次(学分绩等于各科成绩的加权平均,为了解决教师判分标准不统一的问题,其中单科成绩折算公式为:单科成绩=(个人单科成绩/本课程最高成绩)*100)。

所用知识

hibernate编程式事务

poi访问excel表

一、新建项目,导入mysql,poi,hibernate,junit,mysql驱动的jar包

代码具体如下:

1、Score.java

package com.wsz.entity;

public class Score {
	private Integer id; // 主键
	private String studentNumber; // 学号
	private String name; // 姓名
	private String courseName; // 课程名
	private Double score; // 课程成绩
	private Double highestScore; // 课程最高成绩
	private Double creditPoints; // 学分



	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getStudentNumber() {
		return studentNumber;
	}

	public void setStudentNumber(String studentNumber) {
		this.studentNumber = studentNumber;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCourseName() {
		return courseName;
	}

	public void setCourseName(String courseName) {
		this.courseName = courseName;
	}

	public Double getScore() {
		return score;
	}

	public void setScore(Double score) {
		this.score = score;
	}

	public Double getHighestScore() {
		return highestScore;
	}

	public void setHighestScore(Double highestScore) {
		this.highestScore = highestScore;
	}

	public Double getCreditPoints() {
		return creditPoints;
	}

	public void setCreditPoints(Double creditPoints) {
		this.creditPoints = creditPoints;
	}
}

2、Score.hbm.xml映射文件

<?xml version="1.0"?>
			<!DOCTYPE hibernate-mapping PUBLIC 
				"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
				"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.wsz.entity.Score">
		<id name="id">
			<generator class="identity" />
		</id>
		<property name="studentNumber" />
		<property name="name" />
		<property name="courseName" />
		<property name="score" />
		<property name="highestScore" />
		<property name="creditPoints" />
	</class>
</hibernate-mapping>

3、hibernate配置文件   hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
			"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
			"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
			<hibernate-configuration>
				<!--一个数据库一个session-factory定义-->
				<session-factory>
					<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_score</property>
					<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
					<property name="hibernate.connection.username">root</property>
					<property name="hibernate.connection.password">admin</property>
				    <property name="hibernate.current_session_context_class">thread</property> 
					<!--数据库方言,不同数据库的方言不同-->
					<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
					<!--执行时会输出sql语句,方便调试-->
					<property name="hibernate.show_sql">true</property>
					<!--所有的实体对象的配置文件都要在这里关联起来-->
					<mapping resource="com/wsz/entity/Score.hbm.xml"/>
				</session-factory>
			</hibernate-configuration>

4、ScoreDao.java

package com.wsz.entity;

import org.hibernate.Session;

public class ScoreDao {
	
	public void addScore(Score score) {
		Session session = null;
		try {
			session = HibernateUtils.getSessionFactory().getCurrentSession();
			session.beginTransaction();
			
			session.save(score);

			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
	}
	

}

5、初始化数据

package com.wsz.entity;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import junit.framework.TestCase;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class InitDate  extends TestCase {
	 String strFilePath = "C:\\";// 设置路径
	 String strFileName = "控计学院" + ".xls";// 设置名称
	ScoreDao scoreDao=new ScoreDao();

	// 导入excel表数据到数据库
	public  void importScore() {
		try {
			File fSource = new File(strFilePath + strFileName);
			FileInputStream in = new FileInputStream(fSource);
			HSSFWorkbook workbook = new HSSFWorkbook(in);
			HSSFSheet sheet = workbook.getSheetAt(0); // 默认读取第一个工作簿

			int count = sheet.getLastRowNum();
			System.out.println(count); // 数据的行数

			HSSFRow temprow = sheet.getRow(0);
			System.out.println(temprow.getCell(0).getStringCellValue());
			System.out.println(temprow.getCell(1).getStringCellValue());
			System.out.println(temprow.getCell(2).getStringCellValue());
			System.out.println(temprow.getCell(3).getStringCellValue());
			System.out.println(temprow.getCell(4).getStringCellValue());
			System.out.println(temprow.getCell(5).getStringCellValue());

			for (int i = 1; i < count + 1; i++) {
				Score score = new Score();

				HSSFRow row = sheet.getRow(i);
				score.setStudentNumber(row.getCell(0).getStringCellValue());
				score.setName(row.getCell(1).getStringCellValue());
				score.setCourseName(row.getCell(2).getStringCellValue());
				score.setCreditPoints(Double.valueOf(row.getCell(3).getStringCellValue()));
				score.setScore(Double.valueOf(row.getCell(4).getStringCellValue()));
				score.setHighestScore(Double.valueOf(row.getCell(5).getStringCellValue()));
			
				// 保存数据
				scoreDao.addScore(score);
				
				System.out.println(score.getId());
				System.out.println(score.getStudentNumber());
				System.out.println(score.getName());
				System.out.println(score.getCourseName());
				System.out.println(score.getScore());
				System.out.println(score.getHighestScore());
				System.out.println(score.getCreditPoints());

			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

6、ExportDB.java

package com.wsz.entity;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportDB {
	public static void main(String[] args) {
		
		//读取hibernate.cfg.xml文件
		Configuration cfg = new Configuration().configure();
		
		SchemaExport export = new SchemaExport(cfg);
		
		export.create(true, true);
	}
}

7、HibernateUtils.java

package com.wsz.entity;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
	private static SessionFactory factory;
	static {
		try {
			Configuration cfg = new Configuration().configure();
			factory = cfg.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	
	public static SessionFactory getSessionFactory() {
		return factory;
	}
	// factory.getCurrentSession()可以用于同一线程的多个方法,以保证使用同一个Session
	public static Session getSession() {
		return factory.openSession();
	}

	public static void closeSession(Session session) {
		if (session != null) {
			if (session.isOpen()) {
				session.close();
			}
		}
	}
}

8、查看排名的sql语句(没写client)

select name ,sum(score/highestScore*creditPoints*100)/sum(creditPoints) as “成绩” from score group by name  order by sum(score/highestScore*creditPoints*100)/sum(creditPoints) desc;

 9、结果:

© 著作权归作者所有

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
HSSF和XSSF

HSSF是POI工程对Excel(.xls)文件操作的实现,XSSF是POI工程对Excel(.xlsx)文件操作的实现.gradle.build`dependencies {compile('org.springframework.boot:spring-boot-starter')testCompile(......

不正经茂 ⋅ 2016/08/01 ⋅ 1

(1) 如何用Apache POI操作Excel文件-----入门

Apache POI项目的目标就是可以用Java API来创建和维护各种Office文件(MS Word,MS PowerPoint和MS Excel). 本系列文章主要是针对Excel文件的操作。对于Excel的操作,Apache POI提供两种模型...

chancein007 ⋅ 2015/05/28 ⋅ 0

使用 Apache POI 和 OpenOffice API 在 Linux 中统计 Office 文档的页数

简介: 在实际的项目开发中经常会遇到需要在不同的操作系统平台上统计 Microsoft Office 系列文档页数的要求。Apache POI 提供了一套完整的用于访问微软格式文档的 Java API。但是 Apache P...

IBMdW ⋅ 2012/10/26 ⋅ 0

JavaScript与Excel灵活交互制作Web报表

【IT168 技术】Web报表的开发是一个比较常见的功能,然而在B/S构件上实现这些功能并没有在C/S构架上那些简单,针对这样的问题,本篇文章提供相应的解决方案,在下面的内容中将介绍JS与Excel...

天极网 ⋅ 2012/03/01 ⋅ 0

(5) 如何用Apache POI操作Excel文件-----发现Apache的POI的Bug后,如何给Apache的POI报Bug?

在我上篇文章中,(4) 如何用Apache POI操作Excel文件-----发现了POI-3.12一个回归,通过测试POI-3.12的版本,我发现了一个bug,那么发现bug后,该如何处理。我们有2种处理方式,首先我们到A...

chancein007 ⋅ 2015/05/29 ⋅ 0

Java读写excel

先下载JExcelapi的jar包。   读取的文件主要分两类:xls文件、xlsx文件。xls文件的相关操作用的是jxl.jar包,只要将这个包导入即可。xlsx文件的相关操作是利用apache的poi包。 一、xls文件...

pricker ⋅ 2015/10/19 ⋅ 0

POI之PPT-元素操纵

POI之PPT-元素操纵 最近笔者在调研POI API操纵PPT方面的内容,主要目的在于调查POI对PPT中的元素可操控性有多大,以及应用POI API具体能够实现哪些功能。以下是笔者所列举的调查项和结果,调...

chace0120 ⋅ 2015/07/09 ⋅ 7

java读写excel之POI篇—001

POI 简单介绍 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 是创建和维护操作各种符合Office Open XML(OOXML...

Mysoft ⋅ 2015/09/21 ⋅ 0

Apache POI之PPT

Apache POI是一个功能强大、开源免费的项目,旨在提供一套可以操纵Office办公文件的Java APIs。其中有一套组件APIs,可以方便地实现对PPT文件的读写。 在PPT的范畴,POI提供了两套API,HSLF和...

chace0120 ⋅ 2015/06/29 ⋅ 0

一脸懵逼学习Java操作Excel之POI(Apache POI)

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 1:下面简单的程序来创建一个空白Microsoft Excel工作簿。 请记住一定要引入...

别叫小伙 ⋅ 2017/09/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 31分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 51分钟前 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部