⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 joinbydbcontrol.java

📁 利用poi插件和Java语言在web中实现excel的合并功能
💻 JAVA
字号:
package com.dao.JoinByDB;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.SQLException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.poifs.filesystem.*;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;


import com.bean.JoinByDB.JoinByDBForm;
import com.dao.conn.ConnDB;


public class JoinByDBControl {
	/*将数据从数据入口:excel表格录入数据库,并从数据库
	 * 取出数据按公式统计计算,将结果重新录入excel表格中
	*/
	
	private String[] name=new String[5];//存储学生姓名
	private String course;//存储课程名称
	private double[] score=new double[5];//存储学生成绩
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	private String query;
	public ConnDB control = null;
	
	public JoinByDBControl() {
		control=new ConnDB();
	}
	/**
     * 读取文件内容
     * @param sourcefile
     *        源文件路径
     * @param targetfile
     *        目标文件路径
     */
      public void readsourcefile(String sourcefile) {
   	  try {
   		  POIFSFileSystem sourceFs = null;
  		      HSSFWorkbook sourceWb = null;
  		      HSSFSheet sourceSheet = null;
  		     
  		      sourceFs = new POIFSFileSystem(new FileInputStream(sourcefile));
		      sourceWb = new HSSFWorkbook(sourceFs);
		      
		      int sheetCount = getSheetCount(sourceWb);
		     
		      for (int j = 0; j < sheetCount; j++) {
					// 取得源sheet
					sourceSheet = sourceWb.getSheetAt(j);
					getcontent(sourceSheet);
				}
		  }catch (Exception e) {    
   	   e.printStackTrace();    
   	  }    
   	}
      
      /**
     	 * 获取所有sheet数量
     	 * 
     	 * @param wb
     	 * @return 返回该sheet数量
     	 */
     	protected int getSheetCount(HSSFWorkbook wb) {
     		int count = 0;
     		try {
     			for (int i = 0; null != wb.getSheetAt(i); i++) {
     				count++;
     			}
     		} catch (Exception e) {
     			return count;
     		}
     		return count;
     	}
     	
     	/**
  	 * 取文件内容
  	 * 
  	 * @param sheet
  	 *            取sheet的内容
  	 */
  	protected void getcontent(HSSFSheet sheet) {
  		int total = 0;
  		HSSFRow row;
  		String Name=new String();
  		double Score=0;
  		String Course=new String();
  		for (int i = 0;; i++) {
  			// 取前第i行
  			row = sheet.getRow(i);			
  			if (null == row) {
  				total = i;
  				break;
  			}
            for(int j=0;j<row.getLastCellNum();j++)
   			{//按行取数据
  				switch(j) {
  				case 0:{//取第一列数据,即学生姓名
  					     Name=row.getCell((short)j).getStringCellValue();
  				         break;
  				       }
  				case 1:{//取第二列数据:成绩,并保存课程信息
  					    if(i==0) Course=row.getCell((short)j).getStringCellValue();
  				        if(i>0) Score=row.getCell((short)j).getNumericCellValue();
  				        break;
  				       }
  			}
  			name[i]=Name;//利用姓名数组保存记录属性:学生姓名
  			score[i]=Score;//利用成绩数组保存记录属性:学生成绩
  		}
  		if(i==0) course=Course;//保存课程信息
  		else {//从第二行开始,将数据录入数据库中
  				if(insert(name[i],course,score[i])) ;
  			}
  		}
  	}
     //将excel中数据录入到数据库中	
    public boolean insert(String name,String course,double score) {
		conn = ConnDB.getConnection();
		query = "insert into t2(name,course,score)";
		query += " values(?,?,?)";
		try {
			conn.setAutoCommit(false);
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1,name);
			pstmt.setString(2,course);
			pstmt.setDouble(3,score);
			int count = 0 ;
			count = pstmt.executeUpdate();
			conn.commit();
			if(1 == count){
				return true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		}finally{
			try {
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return false;
	}
 
    //获得标题
	public List getCourse() {
		List list = new ArrayList();
		query = "select distinct course from t2;";
        try {
	         rs = control.executeQuery(query);
	         while (rs.next()) {
		      JoinByDBForm bean = new JoinByDBForm();
		       bean.setCourse(rs.getString(1));
		       list.add(bean);
	         }
        } catch (SQLException e) {
	          e.printStackTrace();
        } finally {
	          control.close();
        }
        return list;
	}
	
	 //获得姓名及成绩
	public List getnameandscore() {
		List list = new ArrayList();
		query = "select distinct t2.name,english.score,chinese.score,math.score,personal.avg,personal.total";
		query += " from t2 join (select name,score from t2 where course='英语') as english";
        query += " join (select name,score from t2 where course='语文') as chinese";
        query += " join (select name,score from t2 where course='数学') as math";
        query += " join (select distinct name,avg(score) avg,sum(score) total from t2 group by name) as personal";
        query += " on t2.name=english.name and t2.name=chinese.name and t2.name=math.name and personal.name=t2.name";
        try {
	         rs = control.executeQuery(query);
	         while (rs.next()) {
		      JoinByDBForm bean = new JoinByDBForm();
		       bean.setName(rs.getString(1));
		       bean.setEnglishscore(rs.getDouble(2));
		       bean.setChinesescore(rs.getDouble(3));
		       bean.setMathscore(rs.getDouble(4));
		       bean.setAverage(rs.getDouble(5));
		       bean.setTotal(rs.getDouble(6));
		       list.add(bean);
	         }
        } catch (SQLException e) {
	          e.printStackTrace();
        } finally {
	          control.close();
        }
        return list;
	}
	
	//获得每门课的平均成绩
	public List getAverage() {
		List list = new ArrayList();
		query = "select distinct avg(english.score),avg(chinese.score),avg(math.score) from t2";
        query += " join (select name,score from t2 where course='英语') as english";
        query += " join (select name,score from t2 where course='语文') as chinese";
        query += " join (select name,score from t2 where course='数学') as math";
        query += " on t2.name=english.name and t2.name=chinese.name and t2.name=math.name group by course order by avg(english.score)";
		try {
	         rs = control.executeQuery(query);
	         while (rs.next()) {
		      JoinByDBForm bean = new JoinByDBForm();
		       bean.setEnglishscore(rs.getDouble(1));
		       bean.setChinesescore(rs.getDouble(2));
		       bean.setMathscore(rs.getDouble(3));
		       list.add(bean);
	         }
        } catch (SQLException e) {
	          e.printStackTrace();
        } finally {
	          control.close();
        }
        return list;
	}
	
	//获得每门课的总计成绩
	public List getTotal() {
		List list = new ArrayList();
		query = "select distinct sum(english.score),sum(chinese.score),sum(math.score) from t2";
        query += " join (select name,score from t2 where course='英语') as english";
        query += " join (select name,score from t2 where course='语文') as chinese";
        query += " join (select name,score from t2 where course='数学') as math";
        query += " on t2.name=english.name and t2.name=chinese.name and t2.name=math.name group by course order by sum(english.score)";
		try {
	         rs = control.executeQuery(query);
	         while (rs.next()) {
		      JoinByDBForm bean = new JoinByDBForm();
		       bean.setEnglishscore(rs.getDouble(1));
		       bean.setChinesescore(rs.getDouble(2));
		       bean.setMathscore(rs.getDouble(3));
		       list.add(bean);
	         }
        } catch (SQLException e) {
	          e.printStackTrace();
        } finally {
	          control.close();
        }
        return list;
	}
    //将统计结果按规定格式录入excel表格中
    public void WriteCell() {
		HSSFWorkbook wb = new HSSFWorkbook();//创建工作簿
		HSSFSheet sheet = wb.createSheet("achievement");//创建工作表
		sheet.setColumnWidth((short) 5, (short) 3000);//设置列宽
		sheet.setColumnWidth((short) 6, (short) 3000);
		sheet.setColumnWidth((short) 7, (short) 3000);
		sheet.setColumnWidth((short) 8, (short) 3000);
		sheet.setColumnWidth((short) 9, (short) 3000);
		sheet.setColumnWidth((short) 10, (short) 3000);
		sheet.setHorizontallyCenter(true);//设置内容位置
		sheet.setVerticallyCenter(true);
		HSSFCellStyle style = wb.createCellStyle();//创建单元格格式对象
		HSSFFont font=wb.createFont(); //创建字体对象
		font.setFontHeight((short)300);//设置字体大小
		style.setFont(font);//将字体设置加入到单元格格式定义中
		  
		style.setBorderBottom(HSSFCellStyle.BORDER_THICK); // 设置单无格的边框为粗体 
		  style.setBottomBorderColor(HSSFColor.GOLD.index); // 设置单元格的边框颜色. 
		  style.setBorderLeft(HSSFCellStyle.BORDER_THICK); 
		  style.setLeftBorderColor(HSSFColor.GOLD.index); 
		  style.setBorderRight(HSSFCellStyle.BORDER_THICK); 
		  style.setRightBorderColor(HSSFColor.GOLD.index); 
		  style.setBorderTop(HSSFCellStyle.BORDER_THICK); 
		  style.setTopBorderColor(HSSFColor.GOLD.index); 
		  style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置单元格内容对齐方式
		  style.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
          //设定单元个背景颜色
          style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
          //设置单元格显示颜色
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//设置单元格显示样式
          
          HSSFCellStyle style1 = wb.createCellStyle();
		  style1.setFont(font);
		  style1.setBorderBottom(HSSFCellStyle.BORDER_DASHED); // 设置单无格的边框为粗体 
		  style1.setBottomBorderColor(HSSFColor.DARK_YELLOW.index); // 设置单元格的边框颜色. 
		  style1.setBorderLeft(HSSFCellStyle.BORDER_DASHED); 
		  style1.setLeftBorderColor(HSSFColor.DARK_YELLOW.index); 
		  style1.setBorderRight(HSSFCellStyle.BORDER_DASHED); 
		  style1.setRightBorderColor(HSSFColor.DARK_YELLOW.index); 
		  style1.setBorderTop(HSSFCellStyle.BORDER_DASHED); 
		  style1.setTopBorderColor(HSSFColor.DARK_YELLOW.index);
		  style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		  style1.setFillBackgroundColor(HSSFColor.AQUA.index);
          //设定单元个背景颜色
          style1.setFillForegroundColor(HSSFColor.AQUA.index);
          //设置单元格显示颜色
          style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        
        int rownum=11;//定义工作表数据起始行
		
        HSSFRow row = sheet.createRow(11);//创建行
        rownum++;
		HSSFCell title[] = new HSSFCell[20];//定义单元格数组
		for (short i = 5; i < 11; i++) {
			title[i] = row.createCell(i);//创建单元格
			title[i].setCellStyle(style);//获取单元格格式定义
		}
		title[5].setCellValue("姓名\\课程");//获取单元格内容
		List course = this.getCourse();
		if (course.size() > 0 && course != null) {
			int i=0;
			for (i = 0; i < course.size(); i++) {
				JoinByDBForm titleform = (JoinByDBForm) course.get(i);
				title[i+6].setCellValue(titleform.getCourse());
			}
			title[i+6].setCellValue("平均");
			title[i+7].setCellValue("总计");
		}
		
		List nameandscore =this.getnameandscore();
		if (nameandscore.size() > 0 && nameandscore != null) {
			for (int i = 0; i < nameandscore.size(); i++) {
                JoinByDBForm namescore = (JoinByDBForm) nameandscore.get(i);
                HSSFRow datarow = sheet.createRow(rownum);
				rownum++;
				HSSFCell data[] = new HSSFCell[20];
				for (short j = 5; j < 11; j++) {
					data[j] = datarow.createCell(j);
					data[j].setCellStyle(style1);
				}
                data[5].setCellValue(namescore.getName());
				data[6].setCellValue(namescore.getEnglishscore());
				data[7].setCellValue(namescore.getChinesescore());
				data[8].setCellValue(namescore.getMathscore());
				data[9].setCellValue(namescore.getAverage());
				data[10].setCellValue(namescore.getTotal());
			}
		}
		row = sheet.createRow(rownum);
        rownum++;
        HSSFCell average[] = new HSSFCell[20];
		for (short i = 5; i < 11; i++) {
			average[i] = row.createCell(i);
			average[i].setCellStyle(style);
		}
		average[5].setCellValue("平均:");
		List avgscore = this.getAverage();
		if (avgscore.size() > 0 && avgscore != null) {
			for (int i = 0; i < avgscore.size(); i++) {
				JoinByDBForm averages = (JoinByDBForm) avgscore.get(i);
		        average[6].setCellValue(averages.getEnglishscore());
				average[7].setCellValue(averages.getChinesescore());
				average[8].setCellValue(averages.getMathscore());
			}
		}
		row = sheet.createRow(rownum);
        rownum++;
        HSSFCell total[] = new HSSFCell[20];
		for (short i = 5; i < 11; i++) {
			total[i] = row.createCell(i);
			total[i].setCellStyle(style);
		}
		total[5].setCellValue("总计:");
		List toascore = this.getTotal();
		if (toascore.size() > 0 && toascore != null) {
			for (int i = 0; i < toascore.size(); i++) {
				JoinByDBForm totals = (JoinByDBForm) toascore.get(i);
		        total[6].setCellValue(totals.getEnglishscore());
				total[7].setCellValue(totals.getChinesescore());
				total[8].setCellValue(totals.getMathscore());
			}
		}
		File file = new File("e:\\CalculateCell\\achievement.xls");//创建文件对象
		try {
			FileOutputStream fileOut = new FileOutputStream(file);//创建文件输出流对象
			wb.write(fileOut);//调用工作簿对象的写方法,将定义的工作簿内容写入输出流文件中
			fileOut.close();//关闭输出流
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -